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())
编辑:完整代码见 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())