I'm testing the code below, but it doensn't do what I would like it to do.
delete_if = ['#', ' ']
with open('C:\\my_path\\AllDataFinal.txt') as oldfile, open('C:\\my_path\\AllDataFinalFinal.txt', 'w') as newfile:
for line in oldfile:
if not any(del_it in line for del_it in delete_if):
newfile.write(line)
print('DONE!!')
Basically, I want to delete any line that contains a '#' character (the lines I want to delete start with a '#' character). Also, I want to delete any/all lines that are completely blank. Can I do this in on go, by reading through items in a list, or will it require several passes through the text file to clean up everything? TIA.
It's easy. Check my code below :
filePath = "your old file path"
newFilePath = "your new file path"
# we are going to list down which lines start with "#" or just blank
marker = []
with open(filePath, "r") as file:
content = file.readlines() # read all lines and store them into list
for i in range(len(content)): # loop into the list
if content[i][0] == "#" or content[i] == "\n": # check if the line starts with "#" or just blank
marker.append(i) # store the index into marker list
with open(newFilePath, "a") as file:
for i in range(len(content)): # loop into the list
if not i in marker: # if the index is not in marker list, then continue writing into file
file.writelines(content[i]) # writing lines into file
The point is, we need to read all the lines first. And check line by line whether it starts with #
or it's just blank. If yes, then store it into a list variable. After that, we can continue writing into new file by checking if the index of the line is in marker or not.
Let me know if you have problem.
How about using the ternary operator?
#First option: within your for loop
line = "" if "#" in line or not line else line
#Second option: with list comprehension
newFile = ["" if not line or "#" in line else line for line in oldfile]
I'm not sure if the ternary would work because if the string is empty, an Exception should be shown because "#" won't be in an empty string... How about
#Third option: "Staging your conditions" within your for loop
#First, make sure the string is not empty
if line:
#If it has the "#" char in it, delete it
if "#" in line:
line = ""
#If it is, delete it
else:
line = ""
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.