6

刚接触 python 并尝试学习文件 i/o 的技巧。

我正在以这种格式从一个大(200 万行)文件中提取行:

56fr4
4543d
4343d
5irh3

这是我用来返回代码的函数:

def getCode(i):
    with open("test.txt") as f:
        for index, line in enumerate(f):
            if index == i:
                code = # what does it equal?
                break
    return code

一旦索引到达正确的位置 (i),我使用什么语法来设置代码变量?

4

2 回答 2

12

code = line.strip()

将代码分配给等于 i 的行号,同时删除尾随的新行。

您还需要稍微更新您的代码

 def getCode(i):
    with open('temp.txt', 'r') as f:
             for index, line in enumerate(f):
                     if index == i:
                             code = line.strip()
                             return code

为什么你需要.strip()

>>> def getCode(i):
...     with open('temp.txt') as f:
...             for index, line in enumerate(f):
...                     if index == i:
...                             code = line
...                             return code
 ... 
>>> getCode(2)
"                  'LINGUISTIC AFFILIATION',\n"

是的,“'语言从属关系'”在我当前的 temp.txt 中

于 2011-06-24T20:17:22.707 回答
8

enumerate将一个迭代器转换为另一个迭代器,这样你迭代的东西就变成了一对(数字 ID,来自底层迭代器的原始项目)。

在我们的例子中:

for index, line in enumerate(f):

f是文件对象。文件对象是迭代器:它们迭代文件的行。

我们将其转换为(行号,文件中的行)对的迭代器。

for循环语法遍历迭代器,并将 (line number, line from file) 对分配给变量:(index, line) 。这只是将一个元组分配给另一个元组的正常行为。

因此,每次通过循环时,index都会分配一个行号,并line从文件中分配相应的行。文件中的行是你想要的(可能有一些格式),并且line包含它,所以......

如果上述任何一项没有意义,您可能需要重新阅读该语言的介绍。

于 2011-06-24T20:43:31.123 回答