Voici mon code, je suis sûr que ça a l'air terrible, mais tout cela fonctionne comme il se doit, seul problème que je vais avoir est la dernière ligne ...donné une erreur unicode Je ne comprends pas
import pyPdf
import os
import csv
class UnicodeWriter:
"""
A CSV writer which will write rows to CSV file "f",
which is encoded in the given encoding.
"""
def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
# Redirect output to a queue
self.queue = cStringIO.StringIO()
self.writer = csv.writer(self.queue, dialect=dialect, **kwds)
self.stream = f
self.encoder = codecs.getincrementalencoder(encoding)()
def writerow(self, row):
self.writer.writerow([s.encode("utf-8") for s in row])
# Fetch UTF-8 output from the queue ...
data = self.queue.getvalue()
data = data.decode("utf-8")
# ... and reencode it into the target encoding
data = self.encoder.encode(data)
# write to the target stream
self.stream.write(data)
# empty queue
self.queue.truncate(0)
def writerows(self, rows):
for row in rows:
self.writerow(row)
PDFWriter = csv.writer(open('/home/nick/TAM_work/text/text.doc', 'a'), delimiter=' ', quotechar='|', quoting=csv.QUOTE_ALL)
def getPDFContent(path):
content = ""
# Load PDF into pyPDF
pdf = pyPdf.PdfFileReader(file(path, "rb"))
# Iterate pages
for i in range(0, pdf.getNumPages()):
# Extract text from page and add to content
content += pdf.getPage(i).extractText() + "\n"
# Collapse whitespace
content = " ".join(content.replace(u"\xa0", " ").strip().split())
return content
for word in os.listdir("/home/nick/TAM_work/TAM_pdfs"):
print getPDFContent("/home/nick/TAM_work/TAM_pdfs/" + word)
PDFWriter.writerow ([getPDFContent("/home/nick/TAM_work/TAM_pdfs/" + word)])
Lorsque je l'exécute tout fonctionne jusqu'à ce qu'il frappe cette ...
Traceback (most recent call last):
File "Saving_fuction_added.py", line 52, in <module>
PDFWriter.writerow ([getPDFContent("/home/nick/TAM_work/TAM_pdfs/" + word)])
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2122' in position 81: ordinal not in range(128)
J'aimerais toute aide. Merci les gars.
Matt
Avez-vous des noms de fichiers non-ascii? Je suis confus parce que la piletrace est si courte - il semble indiquer que l'erreur est dans la compréhension de liste (TAM_pdfs + mot), pas dans la fonction de writow()? –
Je pensais cela aussi au début, mais alors ne serait-il pas échouer sur la ligne précédente? – danben
essayé de changer mon .doc à un .csv et en ajoutant essayer: x = unicode (valeur, "ascii") sauf UnicodeError: valeur = unicode (valeur, "utf-8") autre: valeur # a été données ASCII valides pass Mais cela n'a pas fonctionné. Peut-être que je regarde cela de façon totalement erronée? J'ai juste besoin d'obtenir le texte que j'extrais dans un fichier csv. – Matt