I have a number of text files in the form:
alpha 89687
beta 9564
delta 10000
I only want to look at each line individually and evaluate each value in the second column. If the value is not within a certain range I would like to delete the entire file. I have a text file with the titles of all the files which I want to go through. Here is my code:
with open('filetitles.dat', 'r') as f:
for line in f:
with open(line, 'r+') as t:
for i, enumerate(t):
v = i == 2 and #how to specify column
if v<1 or v>100:
delete(t)
z = i == 3 and #how to specify column
if v<100 or v>120000:
delete(t)
Any help would be greatly appreciated. Thanks Below is my modified code. I am having trouble getting it to go to the next line is the conditions aren't met.
import os
with open('test.txt', 'r') as f: #file with titles of files
files=[l.strip() for l in f]
toDel=[]
for file in set(files):
with open(file, 'r+') as t: #open specific file
for line in t:
v,w = line.split()[0:2] #try to specify lines and columns
if type(v) == int and type(w) == float: #check only lines in specific format
if int(v)==1000021 and float(w)<2.5 or float(w)>3: #arbitrary values which will ensure deletion of test file
toDel.append(file)
else:
some command to go to next line
else:
some command to go to next line
for file in set(toDel):
os.remove(file) #delete files
print 'Delete:"{}"'
Something like this would work as a skeleton:
with open('filetitles.dat', 'r') as f:
files=[l.strip() for l in f]
toDel=[]
for file in set(files):
with open(file, 'r') as f:
for line in f: # each line of the file
w,v = line.split()[0:2] # w==col 1, v==col 2
if w=='beta' and int(v)<100000: # example test
toDel.append(file)
for file in set(toDel): # now delete all the files...
# os.remove(file) # 'set()' eliminates dups
print 'Delete: "{}"'.format(file)
EDIT Here is your loop with suggested mods:
for file in set(files):
with open(file, 'r+') as t: #open specific file
for line in t:
# use the appropriate regex to validate the line you seek
match=re.search(r'^(\d+)\s+([-+]?[0-9]*\.?[0-9]+)\s*$',line)
if match:
v=int(match.group(1))
w=float(match.group(2))
if v==1000021 and (w<2.5 or w>3.0):
toDel.append(file)
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.