Форум сайта python.su
3
Есть куча файлов 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")
Офлайн
857
Lukeсклеивай пути через os.path.join()filename = sys.path[0]+"\\2010-03"
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
Спасибо. Невероятно, так намного быстрей. Неужели вывод в файл работает быстрей чем “сложение” строк в память ? А если надо будет получить эту колонку в память как поступить?
Офлайн
857
думаю, это связано с тем, что строка - immutable object, следовательно, ей нужно каждый раз заново перезаписываться в память
Lukeпопробуй список слов, который затем один раз передаётся в ' '.join()
А если надо будет получить эту колонку в память как поступить?
Офлайн