【发布时间】:2019-02-15 16:52:56
【问题描述】:
我有一个最初为 python 3.5+ 编写的脚本。我需要将其转换为 2.6.2。
在脚本中,我使用了readlines(),我认为这两个版本之间的行为不同。
具体来说,我使用readlines() 从由换行符分隔的 txt 文件中检索数据。
这是一个片段:
t=open(supportID+"stmp.txt","r")
timeIn=(t.readlines())
a=(str(timeIn))
supportID=(t.readlines())
b=(str(supportID))
branch=(t.readlines())
c=(str(branch))
clientID=(t.readlines())
d=(str(clientID))
problem=(t.readlines())
e=(str(problem))
solution=(t.readlines())
f=(str(solution))
timeOut=(t.readlines())
g=(str(timeOut))
在我的 3.x 脚本中,我在每个 readlines() 中都有一个“1”,它根据需要执行,但是对于 2.x,这不起作用。如上所示,我已尝试输入值 1-7 和空白。
通过一些研究,我发现一些 2.x 用户使用with open(filename)
这是首选方法还是有办法更改我的原件以使其正常工作?
编辑: 所以我打算使用这种格式
with open(supportID+"stmp.txt") as t:
for line in t:
print(line)
我将其插入并工作,将每一行打印为我的 shell 中的一行。现在我想用它来将每一行分配给一个变量。
编辑 2: 这目前适用于我的环境,但不是此功能的最佳实践。读取每一行并将每一行分配给一个变量。
t=open(supportID+"stmp.txt","r")
lines = t.readlines()
t.close()
a=lines[0]
b=lines[1]
c=lines[2]
...
【问题讨论】:
-
这不会像你在 Python 3 中所说的那样工作,它与这里的 Python 2 工作方式相同。
with语句用于 Python 2 和 3,顺便说一句。我将在您的 Python 3 脚本中猜测您使用的是readline而不是readlines -
使用
x=readlines(1)在我的环境中逐行读取 3x 的 tmp 文件。您是说with open(x)将是 3.x 和 2.x 中的首选方法? -
你没有使用
realines(1),你也不应该使用,这是bytes而不是lines的上限。你应该使用readline。是的,您应该始终使用上下文管理器(with 语句)来打开文件。 -
我不确定你想让我解释什么。 “为什么”得到了回答,“因为这就是语言设计者决定论点应该是什么意思”。您应该查看文档。
-
是的,这是逐行读取文件的惯用方式。
标签: python python-3.x python-2.x