Text files. Examples of solving tasks on modifying text files
This topic provides examples of solving problems that may arise when processing text files. The approach to operating data in files proposed in this topic can be used to solve a wide range of related tasks.
Contents
- 1. How to determine if the data in a text file has run out?
- 2. How to read lines from a text file if their number is unknown? Ways to determine the number of lines in a file
- 3. Replacing the string in a text file. Example
- 4. Removing a line from a file by its index. Example
- 5. Inserting a line in the specified file position. Example
- 6. Swap two lines in a file. Example
- 7. Reversing file lines (rearranging file lines in reverse order). Example
- 8. Sort file lines. The method of selection sorting. Example
- 9. Merge two files. Example
- Related topics
Search other websites:
1. How to determine if the data in a text file has run out?
Python uses the readline() method to read a string. If this method returns an empty string ”, then this is a sign of the end of the file.
Example.
# Calculate the number of lines in a file # 1. Open text file for reading f = open('TextFile1.txt', 'r') # 2. Cycle of reading lines in a file count = 0 # the number of lines in a file s = f.readline() while s != '': # read lines to empty line s = f.readline() count = count+1 print('count = ', count) # display the result # 3. Close the file f.close()
⇑
2. How to read lines from a text file if their number is unknown? Ways to determine the number of lines in a file
There are two main ways to read all lines of a file:
- read lines of a file using readlines() method. The result will be a list. Then use the len() method to determine the number of lines;
- implement a read line loop using readline() until there is no empty line. The readline() method returns an empty string when the end of the file is reached.
Example. The example shows 3 ways to determine the number of lines in a file.
# Determining the number of lines in a file # Method 1. The readline() method. # 1.1. Open text file for reading f = open('TextFile1.txt', 'r') # 1.2. Cycle of reading lines in a file count = 0 # number of lines in a file s = f.readline() while s != '': # read line to empty line s = f.readline() count = count+1 print('count = ', count) # display the result # 1.3. Close the file f.close() # ---------------------------------- # Method 2. The readlines() method # 2.1. Open text file for reading f = open('TextFile1.txt', 'r') # 2.2. Read file lines to list L L = f.readlines() # 2.3. The number of list items == the number of lines in the file count = len(L) print('count = ', count) # 2.4. Close the file f.close() # ------------------------------------- # Способ 3. Using a file iterator # 3.1. Open text file for reading f = open('TextFile1.txt', 'r') # 3.2. Use a file iterator count = 0 for line in f: count = count+1 # 3.3. Display the result print('count = ', count) # 3.4. Close the file f.close()
⇑
3. Replacing the string in a text file. Example
To replace a line in a text file, do the following:
- read the file to the list;
- change the line in the list;
- write the list to a file.
# Replacing the line in a text file # 1. Source line s = "Hello world!" # 2. Specified position (number from 0) pos = 3 # 3. Open file for reading f = open('TextFile1.txt', 'r') # 4. Read all lines from file to list L L = f.readlines() # 5. Replace the line in the list at pos if (pos >= 0) and (pos < len(L)): # in the last line '\n' do not add if (pos==len(L)-1): L[pos] = s else: L[pos] = s + '\n' # 6. Close the file f.close() # ------------------------------------ # Write modified list to file # 7. Open file for reading f = open('TextFile1.txt', 'w') # 8. Write the list for line in L: f.write(line) # 9. Close the file f.close()
⇑
4. Removing a line from a file by its index. Example
Following the example of paragraph 3, a line is deleted by its index.
# Removing a line from a file by index # 1. Enter delete position (numbered from 0) pos = int(input('pos = ')) # 2. Open file for reading f = open('TextFile1.txt', 'r') # 3. Read all lines from file to list L L = f.readlines() # 4. Remove line from the list # Check if pos position is correct if (pos >= 0) and (pos < len(L)): i = pos while i<len(L)-1: L[i] = L[i+1] i = i+1 L = L[:-1] # remove the last item in the list # 5. Close the file f.close() # ------------------------------------ # Write modified list to file # 6. Open file for writing f = open('TextFile1.txt', 'w') # 7. Write the list for line in L: f.write(line) # 8. Close the file f.close()
⇑
5. Inserting a line in the specified file position. Example
In this example, a line is inserted at the specified file position. If you specify the position that is located behind the last line of the file, then the line is appended to the end of the file.
# Insert a line at a given file position # 1. Display the string s = str(input('s = ')) # 2. Enter the insertion position (numbered from 0). # If the position is equal to the number of lines in the file, # then the line is appended to the end of the file. pos = int(input('pos = ')) # 3. Open text file for reading f = open('TextFile1.txt', 'r') # 4. Read all lines from file to list L L = f.readlines() # 5. Check if pos value is correct if (pos<0) or (pos>len(L)): f.close() exit() # 6. Check if pos is the line that follows the last line if pos==len(L): # need to add a line to the end of the list L L[len(L)-1] += '\n' L2 = L + [s] # add the string s to the end of the list L else: # Create a new list L2 that will contain a list L # with a new line s inserted at position pos. L2 = [] # Copy items from L to L2 to the paste position L2 = L2 + L[:pos] # use slice (!!!) # Insert s + a new line into the L2 list L2 = L2 + [s + '\n'] # Copy from L to L2 elements that lie after pos L2 = L2 + L[pos:] # again use the slice # 7. Close the file f.close() # ------------------------------------ # Write newly created L2 list to file # 8. Open file for writing f = open('TextFile1.txt', 'w') # 9. Write list L2 for line in L2: f.write(line) # 10. Close the file f.close()
⇑
6. Swap two lines in a file. Example
When reading a list from a file, the last line of the list may be with the character ‘\n’ at the end or without it. This feature must be taken into account in the program.
# Swap two lines in a file # 1. Enter the position of line 1 (numbered from 0) pos1 = int(input('pos1 = ')) # 2. Enter the position of line 2 (numbered from 0), pos2>pos1 pos2 = int(input('pos2 = ')) # 3. Check condition: pos2>pos1 if pos2<=pos1: exit() # 4. Open text file for reading f = open('TextFile1.txt', 'r') # 5. Read all lines from file to list L L = f.readlines() # 6. Correction of the last line - add '\n' if necessary s = L[len(L)-1] # get the last line length = len(s) # get the length of last line f_nl = True if (length>0)and((s[length-1] != '\n')): L[len(L)-1] += '\n' # add the last line '\n' f_nl = False # 7. Close the file f.close() # 8. Check if pos1 and pos2 are set correctly if (pos1<0)or(pos1>=len(L))or(pos2<0)or(pos2>=len(L)): exit() # 9. Swap strings s = L[pos1] L[pos1] = L[pos2] L[pos2] = s # ------------------------------------ # Write newly created list L to file # 10. Open file for writing f = open('TextFile1.txt', 'w') # 11. If at the end of the file there was no '\n' if f_nl == False: # then remove from the last line '\n' L[len(L)-1] = L[len(L)-1][:-1] # 12. The cycle of writing each line of the list to a file for item in L: f.write(item) # 13. Close the file f.close()
⇑
7. Reversing file lines (rearranging file lines in reverse order). Example
# Rearrange file lines in reverse order # 1. Open text file for reading f = open('TextFile1.txt', 'r') # 2. Read all lines from file to list L L = f.readlines() # 3. Correction of the last line - add '\n' if necessary s = L[len(L)-1] # get the last line length = len(s) # get tht length of last line f_nl = True # flag indicating whether the character '\n' was at the end of the file if (length>0)and((s[length-1] != '\n')): L[len(L)-1] += '\n' # add to the last line '\n' f_nl = False # 4. Close the file f.close() # 5. Create a new list L2 - reverse to list L L2=[] i=0 while i<len(L): s = L[len(L)-i-1] # take line from end of list L L2 = L2 + [s] i = i+1 # 6. If at the end of the file there was no '\n' if f_nl == False: # then remove from the last line '\n' L2[len(L)-1] = L2[len(L)-1][:-1] # ------------------------------------ # Write newly created L2 list to file # 7. Open file for writing f = open('TextFile1.txt', 'w') # 8. The cycle of writing each line of the list to a file for item in L2: f.write(item) # 11. Close the file f.close()
⇑
8. Sort file lines. The method of selection sorting. Example
An example of sorting file lines is provided. The selection sorting method is used.
# Sort file lines. Selection sort method # 1. Open text files for reading f = open('TextFile1.txt', 'r') # 2. Read all lines from file to list L L = f.readlines() # 3. Correction of the last line - add '\n' if necessary s = L[len(L)-1] # get the last line length = len(s) # get the length of last line f_nl = True # flag indicating whether the character '\n' was at the end of the file if (length>0)and((s[length-1] != '\n')): L[len(L)-1] += '\n' # add to the last line '\n' f_nl = False # 4. Close the file f.close() # 5. Selection sort of list L i=0 while i<len(L): k = i # minimal element search x = L[i] j=i+1 while j<len(L): if L[j]<x: k = j x = L[j] j=j+1 # Swap the smallest element of L[i] L[k] = L[i] L[i] = x i=i+1 # 6. Consider if there was a '\n' character at the end if f_nl == False: # then remove from the last line '\n' L[len(L)-1] = L[len(L)-1][:-1] # ------------------------------------ # Write newly created list L to file # 7. Open file for writing f = open('TextFile1.txt', 'w') # 8. The cycle of writing each line of the list to a file for item in L: f.write(item) # 9. Close the file f.close()
⇑
9. Merge two files. Example
# ----------------------- # Merge files myfile1.bin+myfile2.bin => myfile3.bin # 1. Open file for reading f1 = open('myfile1.bin', 'rb') f2 = open('myfile2.bin', 'rb') # 2. Read files to lists L1, L2 L1 = f1.readlines() L2 = f2.readlines() # 3. Merge lists L3 = L1 + L2 # 4. Close files myfile1.bin, myfile2.bin f1.close() f2.close() # 5. Open file myfile3.bin for writing f3 = open('myfile3.bin', 'wb') # 6. Write lines to the file f3.writelines(L3) # 7. Close the resulting file f3.close()
⇑
Related topics
- Files. General concepts. Opening/closing a file. Functions open(), close()
- Examples of working with text files
- Binary files. Examples of working of binary files
- Module struct. Working with binary files. Examples of writing/reading packed binary data
- Module pickle. Serialization of objects. Examples of use for writing/reading information from binary files
⇑