1

我正在使用python 3内置的readline() 函数逐行读取 txt 文件。此文件包含块中的员工信息,如下所示:

名字 Jack \n
姓 Garcia \n
经理姓名 Smith \n
描述 这是员工的描述 \n
bla bla bla bla \n
bla bla bla bla \n
bla bla bla bla。\n
工资 25000\n

我的代码如下所示:

with open(os.path.join(INPUT_FOLDER, filename)) as input_file:
    for line in input_file:
        if line.upper().startswith('DESCRIPTION'):
            description = line.split('DESCRIPTION')[1].strip()
            line = input_file.readline()
            while not line.upper().startswith('SALARY'):
                ...

我在变量中得到了预期值,description但是当input_file.readline()语句被执行时,它又跳了 5 行!!所以我无法正确完成其余的描述。让我生气的是,我之前在同一个文件中读取了其他员工信息块,并且一切正常。

我正在使用pydev 2.7.1在 Eclipse 下执行脚本

有没有人处理过类似的问题?它与IDE,python版本,...有关吗?

先感谢您。

4

2 回答 2

1

您不能混合使用文件迭代和 readline()。file.next()的内置类型文档说:

“为了使 for 循环成为循环文件行的最有效方式(一种非常常见的操作),next() 方法使用隐藏的预读缓冲区。作为使用预读缓冲区的结果, 将 next() 与其他文件方法 (如 readline()) 组合使用不正确。但是,使用 seek() 将文件重新定位到绝对位置将刷新预读缓冲区。

with open(os.path.join(INPUT_FOLDER, filename)) as input_file:
    while True:
        line = input_file.readline()
        if not line:
            break
        if line.upper().startswith('DESCRIPTION'):
            description = line.split('DESCRIPTION')[1].strip()
            line = input_file.readline()
            while not line.upper().startswith(SALARY):
于 2013-05-16T16:18:14.660 回答
0

您正在比较大写,但在未修改的情况下拆分:

line.split('DESCRIPTION')

还有,这

line = input_file.readline()
while not line.upper().startswith(SALARY):

似乎没有附加到您的描述变量中。

您可能需要添加

line = input_file.readline()
while not line.upper().startswith(SALARY):
    description += line
    line = input_file.readline()
于 2013-05-16T16:17:16.433 回答