将页眉和页脚添加到文件中的每一行。函数仅返回第一行

时间:2018-03-05 15:13:52

标签: python python-2.7

我的一些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())

3 个答案:

答案 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()