[英]Python: Creating a file-copy stripped from comments
仍然是 Python 的新手,试图按照书中的示例进行操作。 这应该创建一个文本文件副本,从以# 注释开头的所有行中删除。 它是这样的(包括我的实习生评论):
# this should be able to (create a file if not present yet and) take a file and then write another one with the same contents stripped off comments
# I wasnt able to bring it into a proper work - resulting file empty
f = open("test.dat","w")
# write several lines (the new-line n-symbol)
f.write("line one\nline two\nline three\n# blah blah \n# blah")
#
f.close()
# readline method reads all the characters up to and including the next newline character:
f = open("test.dat","r")
print ( f.read() )
print()
# readlines returns lines including newline character
newf = open("test2.dat","w")
newf.close()
newf = open("test2.dat","r")
while True:
text = f.readline()
if text == "":
break
if text == "#":
continue
newf.write(text)
f.close()
newf.close()
print()
newf = open("test2.dat","r")
print (newf.read())
newf.close()
但是生成的文件是空的并且有 0b。 我可以虚心请教有什么问题吗? 谢谢!
您的代码有几个问题:
您打开了输入文件进行读取并在print(f.read())
消耗了所有内容; 文件指针现在位于文件的末尾。
输出文件被打开用于写入 - 但随后立即关闭,从而创建了一个空文件。 然后打开这个空文件进行阅读。
您的循环一开始就退出,因为文件末尾的readline()
将返回一个空字符串''
您的if
不会检查每行的第一个字符 - 而是将整行与#
匹配。 由于该行还包含一个换行符,因此即使一行中的#
也不符合此条件( readline
将返回'#\\n'
)
您案例的惯用代码可能是
with open('test.dat', 'w') as output_file:
# write several lines (the new-line n-symbol)
output_file.write("line one\nline two\nline three\n# blah blah \n# blah")
# file closed automatically
with open('test.dat') as input_file:
print(input_file.read())
print()
# closed automatically
# reopen input file, open output file
with open('test.dat') as input_file, open('test2.dat', 'w') as output_file:
for line in input_file:
if not line.startswith('#'):
output_file.write(line)
# both files again closed automatically at the end of with block
print('Contents of test2.dat are now:')
with open('test2.dat') as input_file:
print(input_file.read())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.