从文本文件中读取

2 投票
6 回答
821 浏览
提问于 2025-04-16 10:32

我这里不是想要一个答案,而是想要一些指导,告诉我该如何处理这个任务。

我有一个文本文件,里面包含以下信息:

...
    1947q2        -0.6
    1947q3        -0.3
    1947q4         6.2
    1948q1         6.5
    1948q2         7.6
    1948q3         2.2
    1948q4         0.6
...

我的目标是根据关键词来读取这个文本文件。例如,我想读取只包含1947的行,那么输出应该是这样的:

    1947q2        -0.6
    1947q3        -0.3
    1947q4         6.2

因为这些数字和每一年都有关系,我在想把每一行放到一个元组里,然后把所有的元组放到一个列表中。从这个列表里,使用正则表达式来搜索,找到匹配的元组并把它们打印出来。

这样做可以吗?有没有更简单、更明显的解决方案?我并不太在意最优的方法,只是想听听不同的思路,看看该如何处理这个问题。

6 个回答

0

如果输入文件中的数据是固定的——看起来确实是这样——那么像下面这样简单的代码就可以用了:

with open('data.txt') as data:
    for line in data:
        if line[4:8] == '1947':
            print line,

# output:
#     1947q2        -0.6
#     1947q3        -0.3
#     1947q4         6.2

需要注意的是,我使用 print line, 的原因是因为每一行的字符串后面都有一个换行符。

1

你可以做的一件事是 使用生成器,通过一种和你之前做的类似的方法,动态地筛选出列表中的成员:

data = open("file.txt")
fortysevens = (line for line in data if contains_47(line))
for line in fortysevens:
    # do something here

def contains_47(line):
    # your existing code here to detect if a line contains 47
5
import sys
with open('file.txt') as f:
  for line in f:
    if '1947' in line: # or some complex regular expressions test
      sys.stdout.write(line)

你可以在for循环的主体中逐行读取内容,然后决定是否接受这些内容。如果你想让代码看起来更高级,可以看看mapfilter这两个函数。with语句可以确保在操作完成后文件会被关闭。

撰写回答