そこで、テキストファイルを取得し、それを単語に分割し、リストを新しいテキストファイルに書き込むプログラムを作成しています。
私が抱えている問題は、リスト内の文字列が単一引用符ではなく二重引用符である必要があるということです。
例えば
['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))
私はpythonが初めてで、これについて何も発見していません。誰もこれを解決する方法を知っていますか?
[編集:リストに二重引用符が必要なarduinoプロジェクトで出力を使用していたことを忘れていました。]
str
に対するlist
の動作を変更することはできません。
文字列に"
を使用する JSON形式 を使用する方法はどうですか。
>>> 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))
ほとんどの場合、出力内の単一引用符を二重引用符に置き換えるだけで置き換えることができます。
_str(words).replace("'", '"')
_
couldまた、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"
_
Pythonでは、二重引用符と一重引用符は同じです。それらの間で違いはありません。そして、一重引用符を二重引用符に置き換えたり、その逆を行う意味はありません。
2.4.1。文字列およびバイトリテラル
...平易な英語:両方のタイプのリテラルは、一致する単一引用符( ')または二重引用符( ")で囲むことができます。また、3つの単一引用符または二重引用符の一致グループで囲むこともできます(これらは通常、トリプルと呼ばれます引用符で囲まれた文字列)。バックスラッシュ()文字は、改行、バックスラッシュ自体、または引用文字などの特別な意味を持つ文字をエスケープするために使用されます...
「私が抱えている問題は、リスト内の文字列が単一引用符ではなく二重引用符である必要があるということです。」 -次に、単一引用符を二重引用符に置き換えようとせずに、プログラムに単一引用符を受け入れさせる必要があります。