Pourquoi ne csvwriter.writerow() mettre une virgule après chaque personnage?
Ce code ouvre l'url et ajoute le /names
à la fin et ouvre la page et affiche la chaîne de caractères à test1.csv
:
import urllib2
import re
import csv
url = ("http://www.example.com")
bios = [u'/name1', u'/name2', u'/name3']
csvwriter = csv.writer(open("/test1.csv", "a"))
for l in bios:
OpenThisLink = url + l
response = urllib2.urlopen(OpenThisLink)
html = response.read()
item = re.search('(JD)(.*?)(\d+)', html)
if item:
JD = item.group()
csvwriter.writerow(JD)
else:
NoJD = "NoJD"
csvwriter.writerow(NoJD)
Mais j'obtiens ce résultat:
J,D,",", ,C,o,l,u,m,b,i,a, ,L,a,w, ,S,c,h,o,o,l,....
Si je change de chaîne ("JD", "Columbia Law School" ....) puis-je obtenir
JD, Columbia Law School...)
Je ne pouvais pas trouver dans la documentation comment spécifier le délimiteur.
Si j'essaie d'utiliser delimenter
, j'obtiens cette erreur:
TypeError: 'delimeter' is an invalid keyword argument for this function
Merci pour l'aide.
- C'est
delimiter
et pasdelimeter
: docs.python.org/library/csv.html - Si vous avez ce problème avec l'écrivain.writerows, passer d'une liste de listes et non pas une liste de chaînes de caractères.
Vous devez vous connecter pour publier un commentaire.
Il s'attend à une séquence (par exemple: une liste ou un tuple) de chaînes de caractères. Vous êtes en lui donnant une chaîne unique. Une chaîne se trouve être une séquence de chaînes de trop, mais c'est une séquence de 1 chaînes de caractères, ce qui n'est pas ce que vous voulez.
Si vous souhaitez simplement une chaîne de caractères par ligne que vous pourriez faire quelque chose comme ceci:
Ceci enveloppe JD (une chaîne) avec une liste.
writer.writerow([datetime.now().strftime("%Y-%m-%d %H:%M:%S")])
écrit le datetime comme"2016-11-05 20:30:19"
2016-11-05 13:21:11
sans les guillemets. Quelle est la version de Python que vous utilisez?with open(file, "w", newline="") as csvfile:
et puiswriter = csv.writer(csvfile, delimiter=" ")
. Directement après, lewriterow
ligne est exécutée.[datetime.now().strftime("%Y-%m-%d_%H:%M:%S")]
, c'est à dire, sans espace, il a bien fonctionné et sans le quatation marques. Donc, il n'avait rien à voir avec votre solution - il fonctionne très bien!Le csv.classe writer prend un objet iterable que c'est l'argument de writerow; comme des chaînes de caractères en Python sont itératif par caractère, ils sont un argument valable pour writerow, mais vous obtenez au-dessus de la sortie.
Pour corriger cela, vous pouvez diviser la valeur fondée sur les espaces (je suppose que c'est ce que vous voulez)
Ce qui se passe, parce que quand le groupe() la méthode de l'MatchObject instance ne retourne qu'une seule valeur, il la retourne comme une chaîne de caractères. Lorsqu'il y a plusieurs valeurs, ils sont retournés comme un n-uplet de chaînes.
Si vous écrivez une ligne, je suppose, csv.l'écrivain effectue une itération sur l'objet que vous lui transmettez. Si vous passez une chaîne unique (qui est un objet iterable), il parcourt ses personnages, de produire le résultat que vous observez. Si vous passez un tuple de chaînes, il obtient une chaîne réelle, pas un caractère unique à chaque itération.