我的一些python代码有问题。我希望它打开一个文件,几行文字,并添加页眉+页脚到该文件中的每一行。 问题是' create_output()' function仅返回包含其他内容的第一行。如果我切换'返回'打印'在此函数的末尾,它正确显示我的文件中的所有行。可能是什么原因?我想知道我在这里做错了什么。
file_path = '/home/user/Desktop/text.txt'
file_path_edited = '/home/user/Desktop/text_new.txt'
header = 'http://'
footer = '.com'
def open_file():
opened_file = open(file_path)
return opened_file
def edit_file():
edited_file = open(file_path_edited, 'w')
return edited_file
def create_output():
for line in open_file():
line = line.strip()
edited_line = header+line+footer
to_file = edit_file()
to_file.writelines(edited_line)
to_file.close()
return edited_line
print (create_output())
答案 0 :(得分:0)
你只得到一行,因为你一直重新打开写文件而不是让它打开,"w"
会在打开时截断文件 - 所以最后一行存在,休息是没用的IO。此外,你永远不会关闭你的读者afaics。
来自https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files的
open(filename, mode)
:
当只读取文件时,模式可以是'r'
,仅写入'w'
(将擦除具有相同名称的现有文件),'a'
打开要附加的文件;写入文件的任何数据都会自动添加到最后。'r+'
打开文件进行读写。 mode参数是可选的;如果省略'r'
将被假设。
不要将文件拆分为额外的函数,使用with open(...) as bla: bla.write(...)
,这样一旦离开块就会关闭或发生异常。
使用字符串格式 - 'this {} ist repleaced with'.format("something")
或内联变体 - 请参阅下文。
def create_output():
modLines = []
with open('/home/user/Desktop/text.txt',"r") as reader, \
open('/home/user/Desktop/text_new.txt',"w") as writer:
for line in reader:
line = line.strip().rstrip('\n') # rstrip might be better if you only cut \n
modline = f'http://{line}.com' # 3.6 inline string formatting, for 2.7 use
modLines.append(modline) # 'http://{}.com'.format(line)
writer.write(modline+"\n") # write does not autoappend \n
return modlines # return a list of written https...
print (create_output())
应该做的伎俩。
链接:
答案 1 :(得分:0)
好的,我把它改成了这样的东西,现在它工作正常。 感谢您的反馈,现在我知道我做错了什么。
file_path = '/home/user/Desktop/text.txt'
file_path_edited = '/home/user/Desktop/text_new.txt'
header = 'http://'
footer = '.com'
def CreateContent():
with open(file_path) as read_file:
with open(file_path_edited, 'w') as write_file:
for line in read_file.readlines():
new_line = "{}{}{}".format(header, line.strip(), footer)
print(new_line)
write_file.write("{}\n".format(new_line))
CreateContent()
答案 2 :(得分:0)
您可以按照以下方式进一步改进代码:
file_path = '/home/user/Desktop/text.txt'
file_path_edited = '/home/user/Desktop/text_new.txt'
header = 'http://'
footer = '.com'
def CreateContent():
with open(file_path) as read_file, open(file_path_edited, 'w') as write_file:
for line in read_file:
write_file.write("{}{}{}\n".format(header, line.strip(), footer))
CreateContent()