我想迭代整个文件的每一行.一种方法是通过读取整个文件,将其保存到列表中,然后浏览感兴趣的行.这种方法使用了大量内存,所以我正在寻找替代方案.
我的代码到目前为止:
for each_line in fileinput.input(input_file):
do_something(each_line)
for each_line_again in fileinput.input(input_file):
do_something(each_line_again)
Run Code Online (Sandbox Code Playgroud)
执行此代码会显示错误消息:device active.
有什么建议?
目的是计算成对的字符串相似性,意味着对于文件中的每一行,我想与每隔一行计算Levenshtein距离.
在史前时期(Python 1.4),我们做到了:
fp = open('filename.txt')
while 1:
line = fp.readline()
if not line:
break
print line
Run Code Online (Sandbox Code Playgroud)
在Python 2.1之后,我们做了:
for line in open('filename.txt').xreadlines():
print line
Run Code Online (Sandbox Code Playgroud)
在我们在Python 2.3中获得方便的迭代器协议之前,可以做到:
for line in open('filename.txt'):
print line
Run Code Online (Sandbox Code Playgroud)
我见过一些使用更详细的例子:
with open('filename.txt') as fp:
for line in fp:
print line
Run Code Online (Sandbox Code Playgroud)
这是前进的首选方法吗?
[编辑]我得到了with语句确保关闭文件...但为什么不包含在文件对象的迭代器协议中?
我编写了一个命令行实用程序,它使用getopt来解析命令行中给出的参数.我还希望有一个文件名是一个可选参数,比如它在其他实用程序中,如grep,cut等.所以,我希望它具有以下用法
tool -d character -f integer [filename]
Run Code Online (Sandbox Code Playgroud)
我该如何实施以下内容?
我想编写一个读取stdin(无缓冲)的程序,并编写stdout(unbuffered)进行一些简单的char-by-char转换.为了举例说明,我想要x从stdin中删除所有字符.
python ×5
stdin ×2
arguments ×1
command-line ×1
file ×1
file-read ×1
filter ×1
python-2.7 ×1
python-3.x ×1
unix ×1