假设我有一个充满昵称的文本文件。如何使用Python从这个文件中删除特定的昵称?
当前回答
我喜欢这个使用fileinput和inplace方法的方法:
import fileinput
for line in fileinput.input(fname, inplace =1):
line = line.strip()
if not 'UnwantedWord' in line:
print(line)
它比其他答案少一点啰嗦而且足够快
其他回答
我喜欢下面解释的文件输入方法: 从文本文件中删除一行(python)
例如,我有一个文件,其中有空行,我想删除空行,这是我如何解决它:
import fileinput
import sys
for line_number, line in enumerate(fileinput.input('file1.txt', inplace=1)):
if len(line) > 1:
sys.stdout.write(line)
注意:在我的例子中,空行长度为1
我喜欢这个使用fileinput和inplace方法的方法:
import fileinput
for line in fileinput.input(fname, inplace =1):
line = line.strip()
if not 'UnwantedWord' in line:
print(line)
它比其他答案少一点啰嗦而且足够快
一般来说,你不能;您必须重新编写整个文件(至少从更改点到末尾)。
在某些特定的情况下,你可以做得比这个更好
如果所有的数据元素都是相同的长度,并且没有特定的顺序,并且您知道要删除的数据元素的偏移量,那么您可以将最后一项复制到要删除的数据元素之上,并在最后一项之前截断文件;
或者你可以用“这是坏数据,跳过它”的值覆盖数据块,或者在保存的数据元素中保留“此项已删除”的标记,这样你就可以在不修改文件的情况下标记它已删除。
对于短文档(小于100 KB的文档?)来说,这可能有点过分了。
你想从文件中删除特定的行,所以使用这个简短的代码片段,你可以很容易地删除任何带有句子或前缀(符号)的行。
with open("file_name.txt", "r") as f:
lines = f.readlines()
with open("new_file.txt", "w") as new_f:
for line in lines:
if not line.startswith("write any sentence or symbol to remove line"):
new_f.write(line)
按行号删除文件中的某一行。
用文件名和要删除的行号替换变量filename和line_to_delete。
filename = 'foo.txt'
line_to_delete = 3
initial_line = 1
file_lines = {}
with open(filename) as f:
content = f.readlines()
for line in content:
file_lines[initial_line] = line.strip()
initial_line += 1
f = open(filename, "w")
for line_number, line_content in file_lines.items():
if line_number != line_to_delete:
f.write('{}\n'.format(line_content))
f.close()
print('Deleted line: {}'.format(line_to_delete))
示例输出:
Deleted line: 3
推荐文章
- 如何排序mongodb与pymongo
- 不可变与可变类型
- 列表是线程安全的吗?
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- 操作系统。makdirs在我的路径上不理解“~”
- 如何在Django模板中获得我的网站的域名?
- 在django Forms中定义css类
- 如何在Python中scp ?
- Numpy Max vs amax vs maximum
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 每n行有熊猫
- 实例属性attribute_name定义在__init__之外
- 如何获取在Python中捕获的异常的名称?
- 第一次出现的值大于现有值的Numpy
- 如何从Python函数中返回两个值?