2021. 5. 7. 12:16ㆍData science/Python
1. Reading files with open
# Read the Example1.txt
example1 = "Example1.txt"
file1 = open(example1, "r")# Open file using with
with open(example1, "r") as file1:
    FileContent = file1.read()
    print(FileContent)
    
# Read first four characters
with open(example1, "r") as file1:
    print(file1.read(4))
    
# Read certain amount of characters
with open(example1, "r") as file1:
    print(file1.read(4))
    print(file1.read(4))
    print(file1.read(7))
    print(file1.read(15))
# Read certain amount of characters
with open(example1, "r") as file1:
    print(file1.read(16))
    print(file1.read(5))
    print(file1.read(9))
    
# Read one line
with open(example1, "r") as file1:
    print("first line: " + file1.readline())
    
with open(example1, "r") as file1:
    print(file1.readline(20)) # does not read past the end of line
    print(file1.read(20)) # Returns the next 20 chars
    
# Iterate through the lines
with open(example1,"r") as file1:
        i = 0;
        for line in file1:
            print("Iteration", str(i), ": ", line)
            i = i + 1
            
# Read all lines and save as a list
with open(example1, "r") as file1:
    FileasList = file1.readlines()2. Writing
# Write line to file
exmp2 = '/resources/data/Example2.txt'
with open(exmp2, 'w') as writefile:
    writefile.write("This is line A")
# Read file
with open(exmp2, 'r') as testwritefile:
    print(testwritefile.read())
    
# Write lines to file
with open(exmp2, 'w') as writefile:
    writefile.write("This is line A\n")
    writefile.write("This is line B\n")
    
##However, note that setting the mode to w overwrites all the existing data in the file.
Appending Files : keep the existing data by using "a" instead of "w"
# Write a new line to text file
with open('Example2.txt', 'a') as testwritefile:
    testwritefile.write("This is line C\n")
    testwritefile.write("This is line D\n")
    testwritefile.write("This is line E\n")
# Verify if the new line is in the text file
with open('Example2.txt', 'r') as testwritefile:
    print(testwritefile.read())
    
- r+ : Reading and writing. Cannot truncate the file.
- w+ : Writing and reading. Truncates the file. (Overwrite and delete existing data)
- a+ : Appending and Reading. Creates a new file, if none exists. You don't have to dwell on the specifics of each mode for this lab.
#try out the a+ mode:
with open('Example2.txt', 'a+') as testwritefile:
    testwritefile.write("This is line E\n")
    print(testwritefile.read())
    
- .tell() - returns the current position in bytes
- .seek(offset,from) - changes the position by 'offset' bytes with respect to 'from'. From can take the value of 0,1,2 corresponding to begin, relative to current position and end
with open('Example2.txt', 'a+') as testwritefile:
    print("Initial Location: {}".format(testwritefile.tell()))  **Current location return 
    
    data = testwritefile.read()
    if (not data):  #empty strings return false in python       **If there are no more values, 
            print('Read nothing') 
    else:                                                       **If there are more to read 
            print(testwritefile.read())
            
    testwritefile.seek(0,0) # move 0 bytes from beginning.      **back to 0 location 
    
    print("\nNew Location : {}".format(testwritefile.tell()))   **check if location is 0
    data = testwritefile.read()                                 **read 
    if (not data): 									
            print('Read nothing') 
    else: 
            print(data)
    
    print("Location after read: {}".format(testwritefile.tell()) )**check if there are more to read
    
===============================  
Initial Location: 70
Read nothing
New Location : 0
Overwrite
This is line C
This is line D
This is line E
This is line E
Location after read: 70- .truncate() method: This will reduce the file to your data and delete everything that follows.
with open('Example2.txt', 'r+') as testwritefile:
    data = testwritefile.readlines()
    testwritefile.seek(0,0) #write at beginning of file
   
    testwritefile.write("Line 1" + "\n")
    testwritefile.write("Line 2" + "\n")
    testwritefile.write("Line 3" + "\n")
    testwritefile.write("finished\n")
    
    testwritefile.seek(0,0)
    print(testwritefile.read())
    
->Line 1
->Line 2
->Line 3
->finished
->is line D
->This is line E
->This is line E
    
# with Truncate()
with open('Example2.txt', 'r+') as testwritefile:
    data = testwritefile.readlines()
    testwritefile.seek(0,0) #write at beginning of file
   
    testwritefile.write("Line 1" + "\n")
    testwritefile.write("Line 2" + "\n")
    testwritefile.write("Line 3" + "\n")
    testwritefile.write("finished\n")
  
    testwritefile.truncate()
    testwritefile.seek(0,0)
    print(testwritefile.read())
    
->Line 1
->Line 2
->Line 3
->finished
Overwrite from the beginning. And if you use Truncate() method, the rest of the data will be deleted from the location.
Copy a File
#Copy file to another 
with open('Example2.txt', 'r') as readfile:             '''readfile'''
	with open('Example3.txt', 'w') as writefile:		'''write into writefule'''
    	for line in readfile:
        	writefile.write(line)
            
#Verify if the copy is successfully executed 
with open('Example3.txt','r') as testwritefile:
	print(testwritefile.read())# Copy the data from readfile to writefile (example 2 -> example 3)
1) Example2.txt ->readfile
2) Example3.txt -> writefile
3) in readfile, date from readfile copy and paste in writefile
4) Verify Example3.txt -> testwritefile
Exercise
Your local university's Raptors fan club maintains a register of its active members on a .txt document. Every month they update the file by removing the members who are not active. You have been tasked with automating this with your python skills.
#Run this prior to starting the exercise
from random import randint as rnd
memReg='members.txt'
exReg='inactive.txt'
fee=('yes','no')
def genFiles(current, old)
	with open(current,'w+') as writefile:
		writefile.write('Membership No Date Joined Active \n')
		data = "{:^13} {:<11} {:<6}\n"
        
		for rowno in range(20):
			date = str(rnd(2015,2020)+'-' +str(rnd(1,12))+'-'+str(rnd(1,25))
			writefile.write(data.format(rnd(10000,99999), date,fee[rnd(0,1)]))
            
	with open(old,'w+') as writefile:
		writefile.write('Membership No Date Joined Active \n')
		data = "{:^13}  {:<11}  {:<6}\n"
        
		for rowno in range(3):
			date = str(rnd(2015,2020))+'-'+str(rnd(1,12))+'-'+str(rnd(1,25))
			writefile.write(data.format(rnd(10000,99999), date,fee[1]))
            
genFiles(memReg, exReg)Generate members.txt and inactive,txt by using randint
def cleanFiles(currentMem, exMem):
	with open(currentMem, 'r+') as writeFile: 
    	with open(exMem, 'a+') as appendFile:
        	writeFile.seek(0)
            members=writeFile.readlines()
            header = members[0]
            members.pop(0)                      '''delete the items in the index 0'''
            
            inactive =[member for member in members if('no' in member)] '''if statement'''
            
            writeFile.seek(0)
            writeFile.write(header)
            for member in members:
            	if (member in inactive):
                	appendFile.write(member)
				else:
                	writeFule.write(member)
			writeFile.truncate()
            
memReg='members.txt'
exReg ='inactive.txt'
cleanFiles(memReg, exReg)
headers = "Membership No Date Joined Active \n"
with open(memReg, 'r') as readFile:
	print("Active Members: \n\n")
    print(readFile.read())
   
with open(exReg, 'r') as reafFile:
	print("Inactive Members" \n\n")
    print(readFile.rea())
            
            
            cleanFile:
1) currentMem , reading and writing(not overwritten) - writeFile
2) exMem, append and writing (not overwritten) - appendFile
3) go to writeFile location 0 (currentMem)
4) members = read each lines of writeFile(currentMem)
5) header = members[0] : header is located in members index 0
6) members.pop(0) : delete the the item in index 0 and return rest of them(return except the header)
7) inactive = if variable member belongs to members and no is in member
8) go to writeFile location 0 (currentMem)
9) write header in writeFile
10) member is in inactive, write member in appendfile(exMem) , if not, write in writeFile(currentMem)
11) delete the rest of data in writeFile(currentMem)
github.com/IreneJeong/Python-Code