编辑:整个代码见文章底部
我是这个论坛的新手,我有一个问题,如果有人能帮助我解决,我将不胜感激。
情况和目标:
-我有一个字符串列表。每个字符串是一个单词,像这样:['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()和Wrad(),但我仍然得到空行。
归结起来是这样的:出于某种原因,无论我如何使用它,每个'\n'都有两个换行符。我是。当然,如果没有nl,所有的东西都只是一大块文本。
关于使用另一个编辑器:我试着在windows记事本和记事本中打开txt文件。为什么这些程序不能正确显示它?
编辑:这是整个代码。抱歉挪威命名。该程序的目的是读取和清理文本文件,并将单词首先作为列表返回,最终作为新文件返回,每个单词都在新行上。文本文件是拼字游戏单词的列表,所以它相当大(9mb左右)。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用两个回车替换每个换行有点奇怪,但这是以文本模式打开文件的一个特性(通常翻译会更有用)。相反,如果您以二进制模式打开文件,则不会进行此翻译,文件应显示在记事本中。NB.如果您需要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")
Python3将有点棘手。对于要编写的每个字符串文字,必须在其前面加上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())