4

我有一系列文件,我想从每个文件中提取一个特定的数字。在每个文件中,我都有这一行:

name, registration num

紧随其后的两行是注册号。我想从每个文件中提取这个数字。并将其作为字典的值。有人知道这怎么可能吗?

我当前实际上不起作用的代码如下:

matches=[]
for root, dirnames, filenames in os.walk('D:/Dataset2'):  
    for filename in fnmatch.filter(filenames, '*.txt'):   
        matches.append([root, filename])

filenames_list={}       
for root,filename in matches:
    filename_key = (os.path.join(filename).strip()).split('.',1)[0]

    fullfilename = os.path.join(root, filename)
    f= open(fullfilename, 'r')
    for line in f:
        if "<name, registration num'" in line:
            key=filename_key
            line+=2
            val=line
4

5 回答 5

9

我通常next()在我想跳过一行时使用,通常是文件的标题。

with open(file_path) as f:
    next(f) # skip 1 line
    next(f) # skip another one.
    for line in f:
        pass # now you can keep reading as if there was no first or second line.

注意:在 Python 2.6 或更早版本中,您必须使用f.next()

于 2013-05-05T11:47:32.510 回答
2

一种方法是将整行加载到数组中,然后从中读取所需的行。例子

一个名为 testfile 的文件包含以下内容:

A1
B2
C3
D4
E5

一个程序test.py:

#!/usr/bin/env python

file = open('testfile')
lines = file.readlines()[2:]
file.close()

for line in lines:
    print(line.strip())

输出:

$./test.py
C3
D4
E5

编辑:我再次阅读了这个问题,并注意到你只想要一行。然后你可以删除:, 并用于f.getlines()[2]获取文件中的第三行


  • 或者您可以使用 f.getline() 三次,而忽略前两次

  • 或者您可以使用for line in f类型循环,而忽略前两行(有一个递增计数器)

于 2013-05-05T11:28:44.487 回答
0

我想这样的事情会起作用......

f= open(fullfilename, 'r')
for line in f:
    if "name, registration num" in line:
        key=filename_key
        break
f.readline()
res = f.readline()[:-1] #removed trailin newline
于 2013-05-05T11:16:28.927 回答
0
from itertools import islice
with open('data.txt') as f:
    for line in islice(f, 2, None):
        print line
于 2013-05-05T11:16:34.863 回答
0

一般来说,如果你想在循环中对 python 迭代器做一些事情,比如往前看,我发现一个很好的第一个地方是 to import itertoolsand look here。在您的情况下,您可能会受益于他们的 consume.

值得一看,看看这个问题是否以前没有在 SO 上讨论过。编辑:确实-看这里,其中包括对 python 迭代器的很好的讨论。

于 2013-05-05T11:18:43.550 回答