À l'aide de python csv écrivain sans citations
Je suis en train d'écrire une liste de chaînes de caractères comme ci-dessous dans un fichier séparé par le séparateur.
res = [u'123', u'hello world']
Quand j'ai essayez de diviser par ONGLET comme ci-dessous il me donne l'correctement mis en forme de chaîne.
writer = csv.writer(sys.stdout, delimiter="\t")
writer.writerow(res)
gives --> 123 hello world
Mais quand j'essaie de diviser par l'espace à l'aide de delimiter=" "
, il me donne de l'espace, mais avec des guillemets, comme ci-dessous.
123 "hello world"
Comment puis-je supprimer les guillemets. Alors que lorsque j'utilise l'espace comme délimiteur je devrais obtenir
123 hello world
.
EIDT: quand j'ai essayer d'utiliser la escapechar il ne fait pas des guillemets doubles. Mais, partout, dans ma testdata il apparaît un espace, il est double.
Avez-vous lu la doc de La Bibliothèque Standard de Python et ne vous essayez
La question que Peter DeGlopper 2' a souligné, j'ai délimiteur apparaissent dans mes données de test.
writer = csv.writer(sys.stdout, delimiter="\t", quoting = csv.QUOTE_NONE)
?La question que Peter DeGlopper 2' a souligné, j'ai délimiteur apparaissent dans mes données de test.
OriginalL'auteur samsamara | 2014-05-27
Vous devez vous connecter pour publier un commentaire.
Citant le comportement est contrôlé par les diverses
citant
les arguments fournis à l'auteur (ou d'un ensemble sur l'Dialect
objet si vous préférez faire les choses de cette façon). Le paramètre par défaut estQUOTE_MINIMAL
, qui ne produira pas le comportement que vous décrivez, sauf si une valeur contient votre caractère délimiteur, citation de caractères, ou une ligne de caractère de terminaison. Communiquer vos données de test -[u'123', u'hello']
ne produira pas ce que vous décrivez, mais[u'123', u' hello']
serait.Vous pouvez spécifier
QUOTE_NONE
si vous êtes sûr que c'est le comportement que vous souhaitez, dans ce cas, il va essayer d'échapper à des instances de votre caractère délimiteur si vous définissez une caractère d'échappement, ou lever une exception si vous ne le faites pas.Eh bien, ce comportement voulez-vous pour les cas où vos données de test comporte un séparateur? La bibliothèque est d'essayer d'éviter de créer une sortie qui ne peuvent pas être correctement lus en utilisant les mêmes paramètres - qui est, il doit être capable de distinguer entre la sortie de
['foo', 'bar', 'baz']
et['foo', 'bar baz']
. Et pour que la matière['foo', 'bar', ' baz']
. Si ces ambigüités possibles n'est pas question pour vous, vous pourriez être mieux de simplement en utilisant' '.join
comme John Mee suggéré. En général, je pense qu'il vaut mieux préserver ces distinctions, mais il dépend entièrement de votre situation.J'ai testé que lorsque séparateur apparaît dans les données de test csv échoue, mais join() fait le travail. Alors, qui est préféré étant donné que mon délimiteur peut apparaître dans mes données de test (joindre ou csv)?
csv
produira sans ambiguïté de sortie, dans lequel une plus tard, l'analyseur peut distinguer si le délimiteur est présent parce que c'est division champs ou parce qu'il était présent dans l'entrée.join
n' - elle produira le même résultat pour['foo', 'bar', 'baz']
et['foo', 'bar baz']
. Pour cette raison, je considèrecsv
généralement mieux, mais si ce que votre prochaine étape est'foo bar baz'
dans les deux casjoin
donnera à vous avec beaucoup moins de travail.OriginalL'auteur Peter DeGlopper
Vous pouvez définir la
csv.writer
pour citer rien avecquoting=csv.QUOTE_NONE
par exemple:Produit:
Si vous ne
QUOTING_NONE
vous aussi besoin et du caractère d'échappement.OriginalL'auteur Dair
Vous avez besoin de la csv lib? Suffit de rejoindre les cordes...
OriginalL'auteur John Mee