2017-02-12 103 views
4

因此,我正在製作一個程序,它接受一個文本文件,將其分解成單詞,然後將列表寫入新的文本文件。我想用一個列表中的雙引號替換單引號

我遇到的問題是我需要列表中的字符串與雙引號不單引號。

例如

我得到這個['dog','cat','fish']時,我想這個["dog","cat","fish"]

這裏是我的代碼

with open('input.txt') as f: 
    file = f.readlines() 
nonewline = [] 
for x in file: 
    nonewline.append(x[:-1]) 
words = [] 
for x in nonewline: 
    words = words + x.split() 
textfile = open('output.txt','w') 
textfile.write(str(words)) 

我是新來的蟒蛇並沒有發現這事。 任何人都知道如何解決這個問題?

[編輯:我忘了提,我用在需要的列表,以便在雙引號一個Arduino項目輸出]

+0

['狗','貓','魚']與[狗,貓,魚]是相同的,引號只是爲了將琴絃弄溼。引號不是字符串的一部分。嘗試打印(字[0]),你會明白 –

+6

「我遇到的問題是我需要在列表中的字符串與雙引號不單引號。」 - 爲什麼?你打算如何處理這個需要雙引號的文件?你想輸出JSON還是什麼? (如果是這樣,那麼有一個[模塊](https://docs.python.org/3/library/json.html)。) – user2357112

+0

請顯示輸入文件。 – merlin2011

回答

8

你不能改變如何str作品list

如何使用JSON format使用"作爲字符串。

>>> animals = ['dog','cat','fish'] 
>>> print(str(animals)) 
['dog', 'cat', 'fish'] 

>>> import json 
>>> print(json.dumps(animals)) 
["dog", "cat", "fish"] 

import json 

... 

textfile.write(json.dumps(words)) 
+0

感謝您回答我的問題,非常感謝。 – ThatsOkay

+0

'json.dumps('dog')''輸出''「狗」''到文件但我想''狗'''。怎麼做? – chandresh

+0

@chandresh,打印出來。周圍有單引號,表示對象是字符串。 (這就是'repr'表示的方式)。如果你打印它(或寫入文件,...),你會得到你想要的。 – falsetru

0

如果你想雙引號添加到開始和串並做到這一點:

words = ['"'+word+'"' for word in words] 

你的名單將是這樣的:

['"dog"', '"cat"', '"fish"'] 
+0

不是OP的問題 –

1

在Python中,雙引號和單引號是相同的。他們之間沒有什麼不同。並且沒有必要用雙引號替換單引號,反之亦然:

2.4.1。字符串和字節文字

...簡單英語:兩種文字類型都可以用單引號(')或雙引號(「)括起來,也可以用三個單引號或雙引號(這些通常被稱爲三重引號字符串)反斜槓()字符用於轉義具有特殊含義的字符,例如換行符,反斜槓本身或引號字符...

「我遇到的問題是我需要列表中的字符串與雙引號不是單引號。」 - 那麼你需要讓你的程序接受單引號,而不是用雙引號替換單引號。

1

最有可能你會想僅僅通過更換他們更換單引號與您的輸出雙引號:

str(words).replace("'", '"') 

可以還擴展Python的str類型和新的類型改變包裝你的字符串__repr__()方法使用雙引號而不是單引號。不過,使用上面的代碼更簡單,更明確。

class str2(str): 
    def __repr__(self): 
     # Allow str.__repr__() to do the hard work, then 
     # remove the outer two characters, single quotes, 
     # and replace them with double quotes. 
     return ''.join(('"', super().__repr__()[1:-1], '"')) 

>>> "apple" 
'apple' 
>>> class str2(str): 
...  def __repr__(self): 
...   return ''.join(('"', super().__repr__()[1:-1], '"')) 
... 
>>> str2("apple") 
"apple" 
>>> str2('apple') 
"apple"