Python: 如何在单独的行上写一个字符串列表,但没有空行

Python: How to write a list of strings on separate lines but without a blank line

编辑:完整代码见 post 底部

我是这个论坛的新手,我有一个问题,如果您能帮助解决,我将不胜感激。

情况与目标:
- 我有一个字符串列表。每个字符串是一个单词,例如:['WORD'、'LINKS'、'QUOTE' ...] 等等。
- 我想将这个单词(字符串)列表写在新文本文件中的不同行上。
- 人们会认为这样做的方法是将“\n”附加到列表中的每个项目,但是当我这样做时,我在每个列表项目之间得到一个空行。为什么?

请看看这个简单的函数:

def write_new_file(input_list):
    with open('TEKST\TEKST_ny.txt', mode='wt') as output_file: 
        for linje in input_list:
            output_file.write(linje + '\n')

这会生成一个如下所示的文件:

WORD

LINKS

QUOTE

如果我删除“\n”,则文件如下所示:

WORDLINKSQUOTE 

相反,文件应如下所示:

WORD   
LINKS   
QUOTE

我显然做错了什么,但在网上进行了大量试验和阅读之后,我似乎无法做到正确。

非常感谢任何帮助,谢谢!

对 link 关于 write() 与 writelines() 线程的响应: Writelines() 本身并不能解决这个问题,它产生的结果与没有 '\n' 的 write() 相同。除非我在将每个列表项传递给 writelines() 之前为每个列表项添加一个换行符。但是然后我们又回到了第一个选项和空白行......

我尝试使用 linked 线程中的答案之一,使用 '\n'.join(),然后使用 write(),但我仍然得到空行。

归结为:出于某种原因,无论我如何使用它,我都会为每个 '\n' 得到两个换行符。我正在 .strip()' 确定换行符的列表项,如果没有 nl,无论如何一切都只是一大块文本。

关于使用其他编辑器:我尝试在 windows notepad 和 notepad++ 中打开 txt 文件。这些程序无法正确显示的任何原因?

编辑:这是完整的代码。对不起挪威的命名。该程序的目的是读取和清理一个文本文件和 return 单词,首先作为一个列表,最后作为一个新文件,每个单词在一个新行上。文本文件是一个拼字游戏列表,所以它相当大(9 mb 左右)。 PS:我不提倡拼字游戏作弊,这只是一个编程练习:)

def renskriv(opprinnelig_ord):
    nytt_ord = ''
    for bokstav in opprinnelig_ord:
        if bokstav.isupper() == True:
            nytt_ord = nytt_ord + bokstav
    return nytt_ord

def skriv_ny_fil(ny_liste):
    with open('NSF\NSF_ny.txt', 'w') as f: 
        for linje in ny_liste: 
            f.write(linje + '\n')


def behandle_kildefil():
    innfil = open('NSF\NSF_full.txt', 'r')
    f = innfil.read()
    kildeliste = f.split()
    ny_liste = []
    for item in kildeliste:
        nytt_ord = renskriv(item)
        nytt_ord = nytt_ord.strip('\n')
        ny_liste.append(nytt_ord)
    skriv_ny_fil(ny_liste)
    innfil.close()

def main():
    behandle_kildefil()

if __name__ == '__main__':
    main()

我认为你的行中一定有'\n',尽量跳过空行。 我建议你这个代码。

def write_new_file(input_list):
    with open('TEKST\TEKST_ny.txt', 'w') as output_file: 
        for linje in input_list:
            if not linje.startswith('\n'):
                output_file.write(linje.strip() + '\n')

您在评论中说过,python 为您编写的每个换行符 ('\n') 写了两个回车符 return ('\r')。 python 用两个回车符 return 替换每个换行符有点奇怪,但这是以文本模式打开文件的一个功能(通常翻译会更有用)。相反,如果您以二进制模式打开文件,则不会完成此转换,文件应按您希望的方式在 Notepad++ 中显示。注意。如果您需要 ASCII 范围之外的字符,使用二进制模式可能会导致问题——ASCII 基本上只是拉丁字母(无重音符号)、数字和一些符号。

对于python 2 次尝试:

filename = "somefile.txt"
with open(filename, mode="wb") as outfile:
    outfile.write("first line")
    outfile.write("\n")
    outfile.write("second line")

Python 3 会有点棘手。对于您希望编写的每个字符串文字,您必须在其前面加上 b(对于二进制)。对于您不能立即访问或不希望更改为二进制字符串的每个字符串,您必须使用字符串上的 encode() 方法对其进行编码。例如

filename = "somefile.txt"
with open(filename, mode="wb") as outfile:
    outfile.write(b"first line")
    outfile.write(b"\n")
    some_text = "second line"
    outfile.write(some_text.encode())