python空行拼接字符串_Python:如何在单独的行上写一个字符串列表,但不能有空行...

EDIT: See bottom of post for the entire code

I am new to this forum and I have an issue that I would be grateful for any help solving.

Situation and goal:

- I have a list of strings. Each string is one word, like this: ['WORD', 'LINKS', 'QUOTE' ...] and so on.

- I would like to write this list of words (strings) on separate lines in a new text file.

- One would think the way to do this would be by appending the '\n' to every item in the list, but when I do that, I get a blank line between every list item. WHY?

Please have a look at this simple function:

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

This produces a file that looks like this:

WORD

LINKS

QUOTE

If I remove the '\n', then the file looks like this:

WORDLINKSQUOTE

Instead, the file should look like this:

WORD

LINKS

QUOTE

I am obviously doing something wrong, but after a lot of experimenting and reading around the web, I can't seem to get it right.

Any help would be deeply appreciated, thank you!

Response to link to thread about write() vs. writelines():

Writelines() doesn't fix this by itself, it produces the same result as write() without the '\n'. Unless I add a newline to every list item before passing it to the writelines(). But then we're back at the first option and the blank lines...

I tried to use one of the answers in the linked thread, using '\n'.join() and then write(), but I still get the blank lines.

It comes down to this: For some reason, I get two newlines for every '\n', no matter how I use it. I am .strip()'ing the list items of newline characters to be sure, and without the nl everything is just one massive block of texts anyway.

On using another editor: I tried open the txt-file in windows notepad and in notepad++. Any reason why these programs wouldn't display it correctly?

EDIT: This is the entire code. Sorry for the Norwegian naming. The purpose of the program is to read and clean up a text file and return the words first as a list and ultimately as a new file with each word on a new line. The text file is a list of Scrabble-words, so it's rather big (9 mb or something). PS: I don't advocate Scrabble-cheating, this is just a programming exercise :)

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

解决方案

You've said in the comments that python is writing two carriage return ('\r') characters for each line feed ('\n') character you write. It's a bit bizaare that python is replacing each line feed with two carriage returns, but this is a feature of opening a file in text mode (normally the translation would be to something more useful). If instead you open your file in binary mode then this translation will not be done and the file should display as you wish in Notepad++. NB. Using binary mode may cause problems if you need characters outside the ASCII range -- ASCII is basically just latin letters (no accents), digits and a few symbols.

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 will be a bit more tricky. For each string literal you wish you write you must prepend it with a b (for binary). For each string you don't have immediate access to, or don't wish to change to a binary string, then you must encode it using the encode() method on the string. eg.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值