2016-01-15 5 views
1

Этот вопрос задавали ранее, но довольно давно. В настоящее время я пытаюсь открыть очень большой файл (20 ГБ), чтобы манипулировать файлами.Как я могу обработать очень большой файл в python?

Я использую:

read_path = '../text/' 
time = 3600 
data = open(read_path+'genomes'+str(time)).read().replace(',','\n').replace('\n','') 

и она отлично работает, когда я выбираю файл меньшего размера в том же каталоге (genomes1000), но когда я изменить время согласующийся больший файл, я получаю ошибку ,

Точное сообщение об ошибке:

Tempo:analytics scottjg$ python genomeplot.py 
Traceback (most recent call last): 
    File "genomeplot.py", line 27, in <module> 
    data = open(read_path+'genomes'+str(time)).read().replace(',','\n').replace('\n','') 
OSError: [Errno 22] Invalid argument 
Thoughts? 
+0

Так в чем же ошибка? –

+0

Вы имеете в виду Errno 22 как [этот вопрос] (http://stackoverflow.com/questions/15598160/ioerror-errno-22-invalid-mode-r-or-filename-c-python27-test-txt)? Кажется, что файл не существует, убедитесь, что путь действительно точным. – SuperBiasedMan

+0

Да, точно так же, как в этом вопросе: но путь верен! Я знаю, потому что, если я просто изменил «время» в приведенном выше коде на один, связанный с меньшим файлом, он отлично работает. – cancerconnector

ответ

2

Ваш код считывает все содержимое файла в память:

open(read_path+'genomes'+str(time)).read() 

Я подозреваю, что у вас нет памяти, доступной для размещения этого и вероятно, является причиной неудачи. Не было бы лучше обрабатывать его по очереди с вызовом readline в цикле вместо этого?

+0

Ошибки памяти повышают «Errno 34» ОС? – SuperBiasedMan

+0

Я думал, что это может быть проблемой. Я был ленив до сих пор, потому что мои файлы были меньше. – cancerconnector

+0

Если путь соответствует файлу, я бы сказал, что это проблема, даже если я не ожидаю увидеть Errno 22 в связи с этим. – Joppe

Смежные вопросы