Okay, ich habe eine CSV-Datei mit mehreren Zeilen (derzeit mehr als 40k). Aufgrund der großen Anzahl von Zeilen muss ich nacheinander lesen und eine Reihe von Operationen ausführen. Dies ist die erste Frage. Die zweite ist: Wie liest man die CSV-Datei und codiert sie in utf-8? Zweitens liest man die Datei in utf-8 nach dem Beispiel: csv documentation. Mesmo utilizando a classe class UTF8Recoder:
oder zurück, kein Druck é \xe9 s\xf3
. Könnte jemand mir helfen, dieses Problem zu lösen?Python - CSV-Reader - Lesen einer Zeile pro Zeit
import preprocessing
import pymongo
import csv,codecs,cStringIO
from pymongo import MongoClient
from unicodedata import normalize
from preprocessing import PreProcessing
class UTF8Recoder:
def __init__(self, f, encoding):
self.reader = codecs.getreader(encoding)(f)
def __iter__(self):
return self
def next(self):
return self.reader.next().encode("utf-8")
class UnicodeReader:
def __init__(self, f, dialect=csv.excel, encoding="utf-8-sig", **kwds):
f = UTF8Recoder(f, encoding)
self.reader = csv.reader(f, dialect=dialect, **kwds)
def next(self):
'''next() -> unicode
This function reads and returns the next line as a Unicode string.
'''
row = self.reader.next()
return [unicode(s, "utf-8") for s in row]
def __iter__(self):
return self
with open('data/MyCSV.csv','rb') as csvfile:
reader = UnicodeReader(csvfile)
#writer = UnicodeWriter(fout,quoting=csv.QUOTE_ALL)
for row in reader:
print row
def status_processing(corpus):
myCorpus = preprocessing.PreProcessing()
myCorpus.text = corpus
print "Starting..."
myCorpus.initial_processing()
print "Done."
print "----------------------------"
Edit 1: Die Lösung von Mr. S Ringne funktioniert. Aber jetzt kann ich die Operationen in meinem def
nicht tun. Hier ist der neue Code:
for csvfile in pd.read_csv('data/AracajuAgoraNoticias_facebook_statuses.csv',encoding='utf-8',sep=',', header='infer',engine='c', chunksize=2):
def status_processing(csvfile):
myCorpus = preprocessing.PreProcessing()
myCorpus.text = csvfile
print "Fazendo o processo inicial..."
myCorpus.initial_processing()
print "Feito."
print "----------------------------"
Und am Ende des Skripts:
def main():
status_processing(csvfile)
main()
Der Ausgang ist, wenn ich BeautifulSoup
verwenden Links zu entfernen:
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Hmm, aber wie Zeile für Zeile gelesen? In diesem Fall lese ich eine Zeile, führe die Operationen in der 'def status_processing' aus und ich gehe zurück und lese eine andere Zeile. Der Prozess der Korrektur von Wörtern ist ziemlich teuer, um alle gleichzeitig zu lesen und die Operationen auszuführen. –
@ LeandroS.Matos Verwenden Sie chunksize: für df in pd.read_csv ('matrix.txt', sep = ',', header = Keine, chunksize = 1): – Shubham
@ LeandroS.Matos: http://Stackoverflow.com/ Fragen/29334463/pandas-read-csv-Datei-Zeile-für-Zeile – Shubham