Python读取文本文件进行计算

时间:2015-05-05 18:06:49

标签: python

我需要打开数百个* .txt文件。每个文本文件都有4个坐标(x y):

401 353
574 236
585 260
414 376

我需要阅读每一个以便进行简单的计算。到目前为止我所拥有的是:

import sys,os

if __name__ == '__main__':
    if len(sys.argv) > 1:
        path = sys.argv[1]
    else:
        path = os.getcwd() + '/'
    try:
        filt = set([".txt", ".TXT"])

        sortlist = []
        sortlist = os.listdir(path)
        sortlist.sort()

        for item in sortlist:
            fileType = item[-4:]
            if fileType in filt:
                CurrentFile = open(item, 'r')
                TextInCurrentFile = CurrentFile.read()
                print TextInCurrentFile     # Printing textfiles content.
    except Exception, e:
        print e

首先,它没有正确排序文件。我更喜欢数字和字母数字。

但我主要担心的是如何定义定义:(X0,Y0,X1,Y1,X2,Y2,X3,Y3)

是否可以从具有相同文件名的另一个文件中读取,该文件位于计算中包含的另一个文件夹中。我将对每个文件进行一些比较并记录整体结果。

1 个答案:

答案 0 :(得分:0)

让我们按步骤解决这个问题。第一步实际上是按顺序获取所需的文件。我喜欢使用glob模块,但是如果你希望你的匹配不区分大小写,那么你将更好地使用re模块。然后可以通过排序函数进行排序。

import os
import re
import fnmatch

rule = re.compile(fnmatch.translate('*.txt'), re.IGNORECASE) 
print sorted([fname for fname in os.listdir('.') if rule.match(fname)])

现在,由于数据格式是固定的,您只需使用namedtuple列表来包含数据即可。代码看起来像这样:

import os
import re
import fnmatch
import collections

coords_t = collections.namedtuple('coords_t', ['x0', 'y0', 'x1', 'y1', 'x2', 'y2', 'x3', 'y3'])
data_collection = []

rule = re.compile(fnmatch.translate('*.txt'), re.IGNORECASE)
for fname in sorted([name for name in os.listdir('.') if rule.match(name)]):
    with open(fname, 'r') as f:
        data = f.read()
        data_collection.append(coords_t(*data.replace('\n', ' ').split(' ')[:-1]))

print data_collection

现在,您将数据保存为data_collection变量中的namedtuple列表,您可以执行所需的计算。此外,最好使用with上下文管理器来处理文件,因为它可以为您处理可能的异常。

它还取决于您想要实现的结果格式,例如,如果您想知道与文件字典相关联的坐标将是比列表更好的选择,使用

{fname: coords_t(*data.replace('\n', ' ').split(' ')[:-1])}

使用namedtuple可以让你感觉良好"使用data_collection[0].x0等点符号访问它的值。

相关问题