基本的Python文件IO变量与enumerate

10 投票
2 回答
32227 浏览
提问于 2025-04-16 20:14

我刚接触Python,正在学习文件输入输出的基本知识。

我正在处理一个很大的文件,这个文件有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)时,我应该用什么语法来设置代码变量呢?

2 个回答

10

enumerate 是一个可以把一个可迭代对象(比如列表、文件等)转换成另一个可迭代对象的工具。它的作用是把你遍历的每个元素变成一对(数字ID,原始元素)。

在我们的例子中:

for index, line in enumerate(f):

f 是一个文件对象。文件对象是可迭代的:它可以逐行读取文件的内容。

我们把这个文件对象转换成一个包含(行号,文件行内容)对的可迭代对象。

这个 for 循环的语法会遍历这个可迭代对象,并把(行号,文件行内容)这对值分别赋给变量 indexline。这其实就是把一个元组的值赋给另一个元组的正常操作。

所以,每次循环时,index 就会被赋值为当前的行号,而 line 则会被赋值为对应的文件行内容。文件中的这一行就是你想要的内容(可能还会有一些格式),而 line 就包含了这些内容,所以……

如果以上内容有不明白的地方,可能需要重新读一下这门语言的入门知识。

15

code = line.strip()

这行代码的意思是,把当前行的内容赋值给变量code,同时去掉行末的换行符。

你还需要稍微修改一下你的代码。

 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"

没错," 'LINGUISTIC AFFILIATION'," 这个内容在我现在的temp.txt文件里。

撰写回答