python列表换行输出_Python从列表转换为字符串时处理换行符
我有一個(gè)關(guān)于換行符和返回字符的問(wèn)題。呃,這很難解釋,但我會(huì)盡力的。
我有列表形式的數(shù)據(jù)。列表的成員中有換行符,因此。
1
2
3example_list = ["I've always loved jumping
"]
為了使用nlp-though-nltk標(biāo)記這個(gè)句子,我需要一個(gè)字符串。當(dāng)NLTK根據(jù)我運(yùn)行的一些測(cè)試和NLTK教程中的證據(jù)標(biāo)記化時(shí),它將忽略換行符和其他轉(zhuǎn)義字符。
問(wèn)題是,當(dāng)我試圖將example_list轉(zhuǎn)換為字符串時(shí),我得到了這個(gè)輸出
1
2
3
4str(example_list)
'["I\'ve always loved jumping\
\
"]'
注意,所有換行符現(xiàn)在都變成了一個(gè)轉(zhuǎn)義的正斜杠。嘗試將其標(biāo)記化會(huì)產(chǎn)生一個(gè)可怕的結(jié)果,在這里,nltk認(rèn)為跳轉(zhuǎn)是一個(gè)大單詞,因?yàn)樗J(rèn)為帶有兩個(gè)斜杠的換行符實(shí)際上是文本。
是否有人知道任何技巧或良好的實(shí)踐,以確保換行符從不存在于我的列表中,或者在轉(zhuǎn)換為字符串時(shí)忽略這些字符或不"雙轉(zhuǎn)義"。
最后,對(duì)于如何處理?yè)Q行字符以及這些字符如何與不同的數(shù)據(jù)類型交互等相關(guān)的資料,是否有人有任何建議,因?yàn)樗浅A钊死Щ蟆?/p>
謝謝!
您可以使用strip()刪除等。
stackoverflow.com/questions/21325212/…的可能副本?
@巴格夫勞,你為什么刪除了行動(dòng)黨的自我回答?
@亞歷克西斯,部分是我的錯(cuò),我把它標(biāo)記為不是答案,因?yàn)樗皇擎溄印M镀比∠麆h除。
您正在解決錯(cuò)誤的問(wèn)題:從您顯示的輸出中可以清楚地看到,您在一個(gè)實(shí)際包含方括號(hào)、引號(hào)和反斜杠的文件中讀取的內(nèi)容。換句話說(shuō),這些不是新行,而是實(shí)際的\和n序列。這里有一個(gè)(三重引用,原始)字符串,可以重現(xiàn)您的問(wèn)題:
1
2
3
4
5
6
7>>> mess = r'''["I've always loved jumping
"]'''
>>> str(mess)
'["I\'ve always loved jumping\
\
"]'
當(dāng)然,您沒(méi)有將數(shù)據(jù)放在原始字符串中;您是通過(guò)讀取一個(gè)您自己創(chuàng)建的文件得到的,如下所示:
1
2with open("newfile.txt","w") as datafile:
datafile.write(str(list_of_strings)) # <-- Not a good idea
這是你的錯(cuò)。寫(xiě)一個(gè)字符串只會(huì)輸出字符串內(nèi)容,但是在列表中調(diào)用write()會(huì)打印出它的repr(),所以在文件中會(huì)出現(xiàn)引號(hào)和反斜杠。像這樣正確地寫(xiě)出字符串列表:
1
2with open("newfile.txt","w") as datafile:
datafile.writelines(list_of_strings)
…它基本上是這個(gè)的縮寫(xiě):
1
2
3with open("newfile.txt","w") as datafile:
for s in list_of_strings:
datafile.write(s)
這樣做,當(dāng)你讀回你的文件時(shí),它會(huì)正常運(yùn)行,而不必玩游戲。
我不認(rèn)為這是OP的情況——他清楚地表明數(shù)據(jù)是以列表的形式給出的。repr格式來(lái)自str(...)調(diào)用,這是基于對(duì)必須將列表轉(zhuǎn)換為字符串而不是訪問(wèn)字符串元素的誤解…
你可能是對(duì)的…在他們?cè)噲D簡(jiǎn)化的過(guò)程中,問(wèn)題會(huì)破壞他們所處理的數(shù)據(jù)的真實(shí)格式,這并不少見(jiàn),但現(xiàn)在看了他的自我回答,我懷疑你的解釋是正確的。
您的列表中已經(jīng)有字符串。將列表轉(zhuǎn)換為字符串不是您想要的:這是為了顯示列表,例如用于調(diào)試。
你想要的(我假設(shè))是從列表中提取字符串。這會(huì)導(dǎo)致?lián)Q行符保持原樣。至少有兩種方法可以做到這一點(diǎn):
為了使單詞標(biāo)記化最有效,最好先做句子標(biāo)記化。您的示例只顯示一個(gè)包含單個(gè)元素的列表,而該元素恰好包含一個(gè)句子。如果您的數(shù)據(jù)總是每個(gè)元素有一個(gè)句子(即,您已經(jīng)有了句子拆分文本),您可以簡(jiǎn)單地執(zhí)行以下操作:
1
2
3for sentence in example_list:
tokens = word_tokenize(sentence)
# Do something with the tokens of this sentence...
但是,如果文本尚未進(jìn)行句子拆分,則需要先執(zhí)行該操作。關(guān)于您的數(shù)據(jù),有兩種可能性:列表元素要么是段落,要么是任意片段。
在段落的情況下,假設(shè)每個(gè)元素包含多個(gè)句子,但句子從不跨越多個(gè)元素。在這種情況下,代碼可能如下所示:
1
2
3
4for paragraph in example_list:
for sentence in sent_tokenize(paragraph):
tokens = word_tokenize(sentence)
# Do something with the tokens of this sentence...
在最后一種情況下,如果列表元素是任意片段,句子跨越多個(gè)元素,我們需要先將它們連接起來(lái)。NLTK的工具期望一個(gè)句子由一個(gè)連續(xù)的字符串組成,因此必須首先連接所有片段。這樣做:
1
2
3
4text = ''.join(example_list)
for sentence in sent_tokenize(text):
tokens = word_tokenize(sentence)
# Do something with the tokens of this sentence...
希望這能給你一些線索!
總結(jié)
以上是生活随笔為你收集整理的python列表换行输出_Python从列表转换为字符串时处理换行符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 必须要知道的多媒体知识-音视频编解码-h
 - 下一篇: [爬虫]网抑云音乐评论