Python - 以顺序模式导入txt

时间:2013-08-18 17:28:26

标签: python import text-files

在我所说的目录中,有30个txt文件,每个文件包含两列数字,每列大约有6000个数字。我想要做的是导入前3个txt文件,处理给我所需输出的数据,然后我想移动到接下来的3个txt文件。

目录如下:

file0a

file0b

file0c

file1a

file1b

file1c ...等等。

我不想同时导入所有的txt文件,我想导入前3个,处理数据,然后是下一个3等等。我正在考虑制作一本字典 - 虽然我有一种感觉,这可能涉及在字典中写下每个文件名,这将花费太长时间。

编辑:

对于那些感兴趣的人,我想我已经想出了一个解决方案。任何反馈都会非常感激,因为我不确定这是最快捷的做事方式还是最狡猾的方式。

import glob

def chunks(l,n):
  for i in xrange(0,len(l),n):
    yield l[i:i+n]


   Data = []

   txt_files = glob.iglob("./*.txt")

   for data in txt_files:
     d = np.loadtxt(data, dtype = np.float64)
     Data.append(d)

   Data_raw_all  = list(chunks(Data,3))

这里列表'Data'是目录中的所有文本文件,'Data_raw_all'使用'chunks'函数将'Data'中的元素分组为3组。这样你可以选择一个元素Data_raw_all选择目录中相应的3个文本文件。

2 个答案:

答案 0 :(得分:1)

首先,我没有任何原创内容可以包含在这里,我绝对不想要归功于它,因为它全部来自 Python Cookbook 3rd Ed 并且来自{{3 David Beazley(前面提到的 Cookbook 的共同作者之一)。但是,我认为您可能真的会受益于生成器幻灯片中给出的示例。

Beazley所做的是将一堆发电机组合在一起,以便做到以下几点:

  1. 产生与给定文件名模式匹配的文件名。
  2. 从一系列文件名中生成打开的文件对象。
  3. 将一系列生成器连接成一个序列
  4. 为匹配正则表达式模式的那些行填充一系列行
  5. 所有这些代码示例都位于wonderful presentation on generators。这种方法的优点在于,链式生成器只是简单地咀嚼next条信息:它们不会将所有文件加载到内存中以便处理所有数据。这真的是一个很好的解决方案。

    无论如何,如果你通过幻灯片阅读,我相信它会给你一个蓝图,确切地说你想做什么:你只需要根据你想要的信息进行更改。

    简而言之,请查看上面链接的幻灯片,然后跟进,它应该提供解决问题的蓝图。

答案 1 :(得分:1)

我假设你想尽可能少地硬编码文件名。因此,此代码的大部分用于生成文件名。然后使用with语句打开文件。

示例代码:

from itertools import cycle, count

root = "UVF2CNa"

for n in count(1):
    for char in cycle("abc"):
        first_part = "{}{}{}".format(root, n, char)
        try:
            with open(first_part + "i") as i,\
                 open(first_part + "j") as j,\
                 open(first_part + "k") as k:
                # do stuff with files i, j and k here
                pass
        except FileNotFoundError:
            # deal with this however
            pass