我编写了一个脚本来删除外语文本中的多余空格。当我在Windows命令提示符下执行脚本时,我没有收到任何错误。一切看起来都很完美。但是,我没有创建我在脚本中指定的输出文件,也没有修改输入文件。我尝试创建一个空白文档'corpus_1'供脚本写入。然后我尝试回写输入文件。无论哪种方式,指定的文件都保持不变。如何让我的脚本写入文件?我的代码中缺少什么?
def lettersWhitespace():
replacements = {' ':' ', 'c ':'c'}
with open('C:\\Users\\Charles\\corpus.odt','w+') as infile, open('C:\\Users\\Charles\\corpus_1.odt', 'w') as outfile:
for line in infile:
for src, target in replacements.iteritems():
line = line.replace(src, target)
outfile.write(line)
编辑:我相信我发现了问题。看来我的第一行'def lettersWhitespace():'是多余的。如上所述,脚本定义了一个函数,但没有调用该函数。这听起来不错吗?
答案 0 :(得分:1)
w
和w+
都会截断文件。假设您有一个包含a
,b
,c
的文件(每个都在换行符中):
with open('testfile.txt', 'w') as f:
f.write('a\nb\nc')
然后在r
中打开它,您可以阅读文件:
with open('testfile.txt', 'r') as f:
print(f.read())
# a
# b
# c
如果你在w+
模式下打开它,它会被截断(空):
with open('testfile.txt', 'w+') as f:
print(f.read())
#
您可能希望从文件开头开始“非截断”读/写模式:r+
(或者如果您希望文件句柄位于文件末尾:a+
)
with open('testfile.txt', 'r+') as outp, open('testfile.txt', 'r') as inp:
for line in inp:
line = line.replace('a', 'b')
outp.write(line)
在您编写时修改文件:
with open('testfile.txt', 'r') as f:
print(f.read())
# b
# b
# c
可以在this StackOverflow answer of @And中找到非常方便的文件模式摘要。