Python: 如何将字符串列表按独立行写入,但不包含空行

2024-09-27 04:26:48 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:整个代码见文章底部

我是新加入这个论坛的,我有一个问题,我将非常感谢任何帮助解决。

情况和目标:
-我有一个字符串列表。每个字符串都是一个单词,例如:['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

很明显我做错了什么,但是在网上做了很多实验和阅读之后,我似乎没能把事情做好。

任何帮助都将不胜感激,谢谢!

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

我尝试在链接线程中使用一个答案,使用“\n”.Co(),然后写(),但我仍然得到空行。

归根结底是这样的:出于某种原因,我为每个'\n'获得两个换行符,不管我如何使用它。我正在用.strip()'来确定换行符的列表项,如果没有nl,任何东西都只是一大块文本。

关于使用另一个编辑器:我尝试在windows记事本和notepad++中打开txt文件。为什么这些程序不能正确显示?

编辑:这是整个代码。抱歉,挪威人的名字。这个程序的目的是读取和清理一个文本文件,并首先将单词作为一个列表返回,最后作为一个新文件返回,每一个单词放在一个新行上。文本文件是一个拼字列表,所以它相当大(9MB或其他)。附言:我不提倡拼字作弊,这只是一个编程练习:)

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

Tags: 文件字符串intxt列表fordef单词
2条回答

您在注释中说过,python正在为您编写的每个换行符('\n')编写两个回车符('\r')。python将每个换行符替换为两个回车符有点奇怪,但这是以文本模式打开文件的一个特性(通常转换为更有用的内容)。如果改为以二进制模式打开文件,则不会执行此转换,文件应按您的意愿在记事本++中显示。注意。如果需要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())

我认为您的行中一定有一些“\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')

相关问题 更多 >

    热门问题