0

我有许多文本文件的形式:

alpha 89687
beta  9564
delta 10000

我只想单独查看每一行并评估第二列中的每个值。如果该值不在某个范围内,我想删除整个文件。我有一个文本文件,其中包含我要浏览的所有文件的标题。这是我的代码:

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)

任何帮助将不胜感激。谢谢 下面是我修改后的代码。我无法让它进入下一行,因为条件没有得到满足。

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:"{}"'
4

1 回答 1

0

像这样的东西可以作为骨架:

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)     

编辑 这是带有建议模组的循环:

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)
于 2012-06-07T20:28:12.903 回答