尝试读取文件并同时循环

时间:2016-08-18 03:41:23

标签: python

我对此很陌生,所以如果它在错误的地方或其他地方,请移动这个主题。

问题: (快速注意:这都是Python中的)我正在尝试浏览这些100个左右的文件,每个文件的列数相同,并且获取输入的某些列(每个文件的相同列)并将它们写入新文件中。但是,这100个文件不一定都具有相同的行数。在下面的代码中,filec处于循环中并继续在整个100个文件中进行更改。我试图通过查看每个txt文件中的行数并循环多次然后获取我想要的数字来获取我想要的这些列。

    filec = open(string,'r').read().split(',')
    x = len(filec.readlines())

我意识到问题是filec在使用split函数后已成为一个列表,当我使用.read()时,它最初是一个字符串。如何找到行数,这样我就可以遍历行数并获得我想要的每行中的位置?

谢谢!

3 个答案:

答案 0 :(得分:0)

你可以这样做:

{{1}}

对不起,如果有任何错误,我会在移动设备上执行此操作。

答案 1 :(得分:0)

由于您只是在寻找行数,那么这个怎么样 -

t = tuple(open(filepath\filename.txt, 'r'))

print len(t)

答案 2 :(得分:0)

我试图保持代码清晰,很少有线可以做到。获取文件名列表,给出一个字典,将文件名映射到你想要的列(作为列表)。

def read_col_from_files(file_names, column_number):
    ret = {}
    for file_name in file_names:
        with open(file_name) as fp:
            column_for_file = []
            for line in fp:
                columns = line.split('\t')
                column_for_file.append(columns[column_number])
        ret[file_name] = column_for_file
    return ret

我假设你有制表符分隔的列。这样称呼:

data = read_col_from_files(["file_1.txt", "/tmp/file_t.txt"], 5)

这是使用列表理解

的合理缩短代码
def read_col_from_files(file_names, column_number):
    ret = {}
    for file_name in file_names:
        with open(file_name) as fp:
            ret[file_name] = [line.split('\t')[column_number] for line in fp]
    return ret

以下是如何在命令行中执行此操作:

cat FILENAMES | awk '{print $3}'