使用条件保存文件名

时间:2015-07-16 18:08:00

标签: python file input

我正在尝试保存满足特定条件的文件的名称。 我认为最简单的方法是制作一个简短的Python程序,用于导入和读取文件,检查条件是否满足,以及(假设满足)然后保存文件的名称。

我的数据文件只有两列四行,如下所示:

 a:    5
 b:    5
 c:    6
 de:    7

我想保存文件的名称(或文件名的一部分,如果这是一个简单的修复,否则我之后只能sed文件)具有第四个数字的数据文件([3:1])大于8.我尝试使用numpy导入文件,但它说它无法导入第一列中的字母。

我考虑尝试这样做的另一种方式是从cat *.dat >> something.txt开始的命令行,但我无法弄清楚如何做到这一点。

我试图编写的代码是:

import fileinput
import glob
import numpy as np

#Filter to find value > 8

#Globbing value datafiles
file_list = glob.glob("/path/to/*.dat")

#Creating output file containing
f = open('list.txt', 'w')

#Looping over files
for file in file_list:
        #For each file in the directory, isolating the filename
        filename = file.split('/')[-1]
        #Opening the files, checking if value is greater than 8
        a = np.loadtxt("file", delimiter=' ', usecols=1)
        if a[3:0] > 8:
                print >> f,  filename
f.close()

当我这样做时,我收到一条错误TypeError: 'int' object is not iterable,但我不知道那是指什么。

2 个答案:

答案 0 :(得分:1)

我最终使用

import fileinput
import glob
import numpy as np

#Filter to find value > 8

#Globbing datafiles
file_list =  glob.glob("/path/to/*.dat")

 #Creating output file containing
 f = open('list.txt', 'w')

 #Looping over files
 for file in file_list:
        #For each file in the directory, isolating the filename
        filename = file.split('/')[-1]
        #Opening the files, checking if value is greater than 8
        a = np.genfromtxt(file)
        if a[3,1] > 8:
                f.write(filename + "\n")
f.close()

答案 1 :(得分:0)

很难准确说出你想要的东西,但也许是这样的

from glob import glob
from re import findall
fpattern = "/path/to/*.dat"

def test(fname):
    with open(fname) as f:
        try:
           return int(findall("\d+",f.read())[3])>8
        except IndexError:
           pass

matches = [fname for fname in glob(fpattern) if test(fname)]
print matches