带有枚举的基本 python 文件-io 变量

Posted

技术标签:

【中文标题】带有枚举的基本 python 文件-io 变量【英文标题】:Basic python file-io variables with enumerate 【发布时间】:2011-09-22 07:55:51 【问题描述】:

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),我使用什么语法来设置代码变量?

【问题讨论】:

这个问题之前(***.com/questions/2081836/…)已经被问过(几次)并且有一些很好的答案,有讨论;一些使用 enumerate 和一些 linecache(可能更快)。也有一些不好的答案,这本身就很有教育意义。 【参考方案1】:

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'中

【讨论】:

strip() 是不必要的,因为只有 readlines() 添加尾随换行符。 就是这种情况。请参阅解决此问题的更新答案。 “返回码”应该在休息之前?我认为 return 总是应该是函数的最后一行..? 好吧,如果你在返回代码之前中断,代码将不会被返回,如果你在if之外返回代码,你就会冒着代码永远不会被定义的风险。试试吧。我只是在回答之前做了。您可以定义 elsetry 以在最后返回代码,但这是完全正确的。 您可以在函数内的任何位置return。 (您是否应该是一个更大的论点;尝试做您可以轻松理解的事情。)这里的break 是不必要的,并且永远无法联系到。一旦遇到“返回”,该函数的调用就会停止做更多的工作并返回任何值。【参考方案2】:

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

在我们的例子中:

for index, line in enumerate(f):

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

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

for 循环语法遍历迭代器,并将(行号,文件中的行)对分配给变量:(索引,行)。这只是将一个元组分配给另一个元组的正常行为。

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

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

【讨论】:

+1 感谢您花时间解释 enumerate 而不仅仅是像我那样给他“他需要的东西”。或像其他人一样复制指向文档的链接。我之前看到有人用简单的“sudo”回答了一个问题,并将其链接到*** =( 我经常用那种简洁的方式回答问题,但有时似乎显然有必要通过事情与人们交谈。 我正在尝试在学习的过程中编写基本脚本。如果我只是“阅读介绍”,它不会粘住任何东西,所以我试着读一点,然后做一个小项目,等等。在黑板上的某个地方,我可以问我更简单的问题,而不会让人生气吗?我多次阅读 enumerate 文档,但它的措辞对我来说没有意义。

以上是关于带有枚举的基本 python 文件-io 变量的主要内容,如果未能解决你的问题,请参考以下文章

iOS之枚举用法

Python:从带有变量的文件中调用查询

python 有宏定义,或者枚举么

Python学习记录之变量与基本数据类型

PHP:带有值的枚举[重复]

使用 scipy.io.loadmat 从 .mat Matlab 文件中将字典键转换为 Python 中具有相同值的变量名