基本的Python文件IO变量与enumerate
我刚接触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
循环的语法会遍历这个可迭代对象,并把(行号,文件行内容)这对值分别赋给变量 index
和 line
。这其实就是把一个元组的值赋给另一个元组的正常操作。
所以,每次循环时,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文件里。