2016-10-19 7 views
-1

Ich habe eine CSV-Datei mit etwa 5000 Zeilen Daten. Ich möchte ungefähr 10% der Daten lesen (z. B. 50 Zeilen).Lesen von N Prozent der Zeilen aus der CSV-Datei und Schreiben in eine andere Datei

zum Beispiel: lässt sagen, dass ich eine CSV-Datei mit 1000 Zeilen Daten habe. Was ich tun muss, ist einen Prozentsatz der Daten (sagen wir 10%, dh 10 Zeilen) zu nehmen und in eine andere CSV-Datei ohne Datenrahmen zu legen, dh ohne die Daten in den Speicher zu legen, direkt in die zweite CSV-Datei . Hoffe, das sagt dir, was ich brauche.

+0

Verwenden Sie nrows - Anzahl der zu lesenden Zeilen. http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html – Zero

+0

lässt sagen, dass ich eine CSV-Datei mit 1000 Zeilen Daten habe. Was ich tun muss, ist einen Prozentsatz der Daten (sagen wir 10%, dh 10 Zeilen) zu nehmen und in eine andere CSV-Datei ohne Datenrahmen zu legen, dh ohne die Daten in den Speicher zu legen, direkt in die zweite CSV-Datei . Hoffe, das sagt dir, was ich brauche. – Zaire

+1

Sie scheinen über ein paar Dinge verwirrt ... 10% von 5.000 ist 500. Und Sie können keine Datei lesen, ohne es zu öffnen. Eröffnung liest nicht - es bereitet gerade vor zu lesen. Das Öffnen einer Datei lädt diese Datei nicht in den Speicher - nur eine 'read()' -ähnliche Operation liest eine Datei. –

Antwort

0

Sorry, ich kann es nicht in python codieren, aber das Prinzip ist, wie Sie jede Zeile der CSV lesen, eine Zufallszahl zwischen [1..100] generieren, und wenn es größer als 90 ist, schreiben Sie die Linie zu Ihrer Ausgabedatei.

Dieser Ansatz hat den Vorteil, dass nur jeweils eine Zeile in den Speicher geladen werden muss.

Ich tat es in awkhere.

0

Sie können nicht sagen, wie viele Zeilen es in Ihrer Datei gibt, ohne es zuerst zu lesen. Sie können das nur, wenn Sie Ihre Dateigröße kennen und alle Zeilen eine feste Länge haben, was bei verschiedenen Daten eher zweifelhaft ist. Wenn Sie andererseits wissen, wie viele Zeilen sich in Ihrer Datei befinden, können Sie einfach zwei Dateien öffnen, eine zum Lesen und eine weitere zum Schreiben und Lesen und Schreiben der benötigten Zeilen in einer for-Schleife. Sie benötigen dazu keine Pandas, z. B .:

linecount = 10 
with open('1.csv', 'r') as f, open('out.csv', 'w') as o:   
    while linecount > 0: 
     o.write(f.readline()) 
     linecount -= 1 
+0

Das einzige Problem ist, wenn Sie die Dateien öffnen, legen Sie den Inhalt der Datei in den Speicher. ich darf das nicht. Ich habe den Dateiinhalt direkt auf einen anderen übertragen, ohne die Dateien zu öffnen – Zaire

+0

Gibt es einen Weg, das zu tun? – Zaire

+0

Sie lesen nicht sofort die gesamte Datei im Speicher. Ihr Betriebssystem verwendet bei Bedarf Datei-Caches. Sie können diesen Vorgang z. B. über die Kernel-Einstellungen in Linux optimieren, aber Sie können die Speicherauslastung nicht vollständig beseitigen. Jedes Programm, das von der Festplatte liest und dann auf die Festplatte schreibt, verwendet für diese Aufgabe eine Art Speicherpuffer. Ich befürchte, dass Sie dies nicht ohne Speicher oder Öffnen einer Datei tun können. – nullop

Verwandte Themen