Я использую приведенный ниже код для переименования нескольких сотен файлов, он прекрасно работает, когда размер файла меньше 1 ГБ, но когда он встречается с большими файлами, он ничего не извлекает, а полученное имя файла пустое.

import os, linecache

for filename in os.listdir(path):
    if not filename.startswith("out"): continue # less deep
    file_path = os.path.join(path, filename) # folderpath + filename
    fourteenline = linecache.getline(file_path, 14) # maybe 13 for 0-based index?
    new_file_name = fourteenline[40:40+50].rstrip() # staring at 40 with length of 50
    os.rename(file_path, os.path.join(path, new_file_name))
3
Moh 24 Сен 2018 в 12:44

2 ответа

Лучший ответ

Вот рабочий код:

    file_path = os.path.join(path, filename) 
    fb=open(file_path)
    secondline=next(islice(fb,1,2))
    fb.close()
    print(secondline)
    new_file_name = secondline[28:28 + 70].rstrip() 
    Filenamenew = new_file_name
    os.rename(file_path, os.path.join(path, Filenamenew))
1
Moh 25 Сен 2018 в 06:46

Не используйте linecache. Он читает все файлы в памяти и тихо завершает работу при нехватке памяти.

Просто open каждый файл и прочитайте 14 строк в простом цикле или с помощью itertools.islice.

2
Janne Karila 24 Сен 2018 в 13:41