web-dev-qa-db-fra.com

Je veux remplacer les guillemets simples par des guillemets doubles dans une liste

Je crée donc un programme qui prend un fichier texte, le décompose en mots, puis écrit la liste dans un nouveau fichier texte.

Le problème que j'ai est que j'ai besoin que les chaînes de la liste soient avec des guillemets doubles et non des guillemets simples.

Par exemple

J'ai compris ['dog','cat','fish'] quand je veux ça ["dog","cat","fish"]

Voici mon code

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

Je suis nouveau sur python et je n'ai rien trouvé à ce sujet. Quelqu'un sait comment résoudre ce problème?

[Modifier: j'ai oublié de mentionner que j'utilisais la sortie dans un projet arduino qui nécessitait que la liste ait des guillemets doubles.]

7
ThatsOkay

Vous ne pouvez pas modifier le fonctionnement de str pour list.

Que diriez-vous d'utiliser format JSON qui utilise " pour les chaînes.

>>> 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))
23
falsetru

Vous voudrez probablement remplacer les guillemets simples par des guillemets doubles dans votre sortie en les remplaçant:

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

Vous pourriez étendez également le type str de Python et encapsulez vos chaînes avec le nouveau type en changeant la méthode __repr__() pour utiliser des guillemets doubles au lieu de simples. Il vaut mieux être plus simple et plus explicite avec le code ci-dessus, cependant.

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"
7
Harvey

En Python, les guillemets doubles et les guillemets simples sont identiques. Il n'y a pas de différence entre eux. Et il est inutile de remplacer un guillemet simple par un guillemet double et vice versa:

2.4.1. Littéraux chaîne et octets

... En anglais: les deux types de littéraux peuvent être placés entre guillemets simples (') ou doubles ("). Ils peuvent également être placés dans des groupes correspondants de trois guillemets simples ou doubles (généralement appelés triples -quoted strings). Le caractère backslash () est utilisé pour échapper les caractères qui ont autrement une signification spéciale, comme le retour à la ligne, le backslash lui-même ou le caractère guillemet ...

"Le problème que j'ai est que j'ai besoin que les chaînes de la liste soient avec des guillemets doubles et non des guillemets simples." - Ensuite, vous devez faire en sorte que votre programme accepte les guillemets simples, sans essayer de remplacer les guillemets simples par des guillemets doubles.

2
Huy Vo