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'.join(),然后写(),但我仍然得到空行。

可以归结为:出于某种原因,无论我如何使用它,每个'n'都会得到两个换行符。我正在使用。strip()来确定换行字符的列表项,并且没有nl,无论如何,所有内容都只是一个巨大的文本块。

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

编辑:这是整个代码。抱歉用了挪威的名字。该程序的目的是读取和清理文本文件,并首先以列表的形式返回单词,最后以每个单词在新行上的新文件的形式返回单词。文本文件是一个Scrabble-words列表,所以它相当大(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')字符编写两个回车('r')字符。python用两个回车符替换每个换行符有点奇怪,但这是在文本模式下打开文件的一个特性(通常翻译成更有用的东西)。如果你以二进制模式打开你的文件,那么这个翻译将不会完成,文件应该显示为您希望在notepad++中。NB。如果你需要ASCII范围之外的字符,使用二进制模式可能会导致问题——ASCII基本上只是拉丁字母(没有重音)、数字和一些符号。

For python 2 try:

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

相关内容

  • 没有找到相关文章

最新更新