Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python从文本文件中删除不包含特定字符串的行_Python_String_Text_File Io_File - Fatal编程技术网

使用python从文本文件中删除不包含特定字符串的行

使用python从文本文件中删除不包含特定字符串的行,python,string,text,file-io,file,Python,String,Text,File Io,File,我试图在日志文件中形成特定用户名的引号文件。如何删除其中不包含特定用户名的每一行?或者,如何将包含此用户名的所有行写入新文件?沿着这一行的内容就足够了: newfile = open(newfilename, 'w') for line in file(filename, 'r'): if name in line: newfile.write(line) newfile.close() 见: f、 readlines()返回包含文件中所有数据行的列表 另一种读取行的方

我试图在日志文件中形成特定用户名的引号文件。如何删除其中不包含特定用户名的每一行?或者,如何将包含此用户名的所有行写入新文件?

沿着这一行的内容就足够了:

newfile = open(newfilename, 'w')
for line in file(filename, 'r'):
    if name in line:
        newfile.write(line)
newfile.close()
见:

f、 readlines()返回包含文件中所有数据行的列表

另一种读取行的方法是在文件对象上循环。这是内存效率高,速度快,并导致更简单的代码

>>> for line in f:
        print line
您还可以使用关键字检查
的使用情况。该文件的优点是在其套件完成后正确关闭

>>> with open(filename, 'r') as f:
...     read_data = f.read()
>>> f.closed
True
或者如果您不想在内存中存储所有行

with open(logfile) as f_in:
    lines = (l for l in f_in if username in l)
    with open(outfile, 'w') as f_out:
        f_out.writelines(lines)

我比较喜欢第一个,但是对于一个大文件,它可能会拖拉。

我知道你要求使用python,但是如果你在unix上,这是grep的工作

grep name file

如果您不在unix上,那么。。。上面的答案就是这样:)

在第二种情况下,你不需要缩进第二个“with”,原因与在第一种情况下你不需要缩进的原因相同。@Karl Knechtel我确实需要。因为在第二种情况下,我使用的是生成器表达式,如果退出
with
语句,则文件将被关闭,并且在生成器表达式实际得到处理时将导致错误。试试看。这是我能想到的将生成器表达式用于文件处理的唯一方法。啊,我明白了。生成器的存在不会使文件保持打开状态。愚蠢的我:)
with open(logfile) as f_in:
    lines = (l for l in f_in if username in l)
    with open(outfile, 'w') as f_out:
        f_out.writelines(lines)
grep name file