som*_*me1 6 python file-io enumerate
python的新手,并试图学习文件i/o的绳索.
我正在使用以下格式从大型(200万行)文件中提取行:
56fr4
4543d
4343d
5irh3
Run Code Online (Sandbox Code Playgroud)
这是我用来返回代码的函数:
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
Run Code Online (Sandbox Code Playgroud)
一旦索引到达正确的位置(i),我使用什么语法来设置代码变量?
mat*_*hew 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
Run Code Online (Sandbox Code Playgroud)
为什么你需要 .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"
Run Code Online (Sandbox Code Playgroud)
是的,"'LINGUISTIC AFFILIATION',"是我目前的temp.txt'
enumerate 将一个迭代器转换为另一个迭代器,这样你迭代的东西就成了一对(数字ID,来自底层迭代器的原始项).
在我们的情况下:
for index, line in enumerate(f):
f是文件对象.文件对象是迭代器:它们遍历文件的行.
我们将它转换为迭代器(行号,行文件)对.
的for循环语法在迭代迭代,并分配(行号,从文件中的行)对添加到变量:(索引,线).这只是将一个元组分配给另一个元组的正常行为.
因此,每次循环时,index都会分配一个行号,并line从文件中分配相应的行.文件中的行是你想要的(可能有一些格式),并line包含它,所以...
如果上述任何一个没有意义,您可能需要重新阅读该语言的介绍.