我一直在尝试在 Python 中进行一些文本操作,但遇到了很多问题,主要是由于对 Python 中文件操作的工作原理存在根本性的误解,因此我希望能够澄清这一点。
假设我正在遍历一个名为“my.txt”的文本文件,它包含以下内容:
3 10 7 8
2 9 8 3
4 1 4 2
我用来遍历文件的代码是:
file = open ("my.txt", 'r')
for line in file:
print line`
我从教程中复制并粘贴了上述代码。我知道它的作用,但我不知道它为什么起作用,这让我很困扰。我试图准确理解变量“line”在文件中代表什么。它是数据类型(字符串?)还是其他类型。我的直觉告诉我,每一行代表一个可以被操作的字符串(这正是我想要的),但我也明白字符串在 Python 中是不可变的。
内存在这一切中扮演什么角色,如果我的文件太大无法放入内存,它还能工作吗? line[3] 是否允许我访问每一行中的第四个元素? 如果我只想在第二行工作,我可以这样做:
if line == 2:
在 for 循环中?
可能值得注意的是,我是 Python 的新手并且来自 C\C++ 背景(不习惯不可变字符串)。我知道我把很多问题压缩成了一个问题,但对一般主题的任何澄清都会很有帮助:)
请您参考如下方法:
line 是一行文本,表示为字符串。字符串是不可变的,但这不是操纵它们的问题; all variables in Python are references, and assigning to a variable points the reference to a new object . (在 C++ 中,您不能更改引用指向的位置。)遍历文件就是遍历行,因此在每次迭代中,line 引用表示输入文件下一行的新字符串.
如果您熟悉 range-based for loops或其他语言的 for-each 结构,这就是 Python 的 for 的工作方式。循环变量不是计数器;你做不到
if line == 2:
因为 line 不是行的索引;这是线本身。你可以做
for i, line in enumerate(f):
if i == 2:
do_stuff_with(line)
break # No need to load the rest of the file
请注意,file 是内置函数的名称,因此将这个名称用于您自己的变量是个坏主意。
