Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 21, 2012 23:16:40

Luke
От:
Зарегистрирован: 2010-11-29
Сообщения: 30
Репутация: +  3  -
Профиль   Отправить e-mail  

Как ускорить работу с csv файлами?

Есть куча файлов csv примерно по 150 мегабайт каждый.
Нужно выбрать одну колонку и записать в txt файлы, для передачи в другую программу (понимает только txt). Написал такой скрипт:

#!/usr/bin/env python
# -*- coding: cp1251 -*-
import sys
import csv
filename = sys.path[0]+"\\2010-03"
def readdata(filename):
	data=""
	with open(filename, 'rb') as hfile:
		oreader = csv.reader(hfile, delimiter=',')
		for row in oreader:
			data=data+row[2]+"\n"
	return data
def savedata(data,filename):
	with open(filename, 'w') as hfile:
		hfile.write(data)
	return
data = readdata(filename+".csv")
savedata(data,filename+".txt")
raw_input("Done. Press Enter for exit")
Он работает , но очень медленно.
Как можно ускорить работу с csv?



Офлайн

#2 Ноя. 22, 2012 01:53:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как ускорить работу с csv файлами?

Luke
filename = sys.path[0]+"\\2010-03"
склеивай пути через os.path.join()

with open(ifname, 'rb') as ihfile, \
     open(ofname, 'w') as ohfile:
    oreader = csv.reader(ihfile, delimiter=',')
    for row in oreader:
        print >>ohfile, row[2]
проверь скорость



Отредактировано py.user.next (Ноя. 22, 2012 02:01:13)

Офлайн

#3 Ноя. 22, 2012 11:18:14

Luke
От:
Зарегистрирован: 2010-11-29
Сообщения: 30
Репутация: +  3  -
Профиль   Отправить e-mail  

Как ускорить работу с csv файлами?

Спасибо. Невероятно, так намного быстрей. Неужели вывод в файл работает быстрей чем “сложение” строк в память ? А если надо будет получить эту колонку в память как поступить?



Офлайн

#4 Ноя. 23, 2012 05:04:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Как ускорить работу с csv файлами?

думаю, это связано с тем, что строка - immutable object, следовательно, ей нужно каждый раз заново перезаписываться в память

Luke
А если надо будет получить эту колонку в память как поступить?
попробуй список слов, который затем один раз передаётся в ' '.join()



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version