Pandas сканирование каталога, чтобы исправить несколько поврежденных файлов Excel, объединить все или несколько фиксированных файлов в один фрейм данных - PullRequest
1 голос
/ 30 января 2020

Изо всех сил python Новичок ie. Я хотел бы сделать следующее: (1.) исправить несколько поврежденных файлов Excel в папке, зацикливая их, чтобы исправить их; сохранить восстановленные / исправленные файлы в новом месте (2) объединить все (или выбранные) из исправленных / восстановленных файлов Excel в один pandas кадр данных. Если возможно, я бы хотел, чтобы код мог выбирать, скажем, первые 10 файлов из-за нехватки памяти.

Код перестает работать в самом первом файле и указывает, что такого файла нет, в то время как файл существует в каталоге. Помощь с обоими кодами будет высоко ценится. Спасибо.

Пожалуйста, найдите прикрепленный блокнот, содержащий код и сообщение об ошибке (проблемы с вставкой кода здесь).

file_dir = r"""C:\Users\Documents\corrupted_files""" 
for filename in os.listdir(file_dir):
    print(filename)
    file= os.path.splitext(filename)[0]
    # Opening the file using 'utf-16' encoding
    file1 = io.open(filename, "r", encoding="utf-16")[0]
    data = file1.readlines()
    xldoc = Workbook()
    # Adding a sheet to the workbook object
    sheet = xldoc.add_sheet("Sheet1", cell_overwrite_ok=True)
    # Iterating and saving the data to sheet
    for i, row in enumerate(data):
    # Two things are done here
    # Removeing the '\n' which comes while reading the file using io.open
    # Getting the values after splitting using '\t'
        for j, val in enumerate(row.replace('\n', '').split('\t')):
            sheet.write(i, j, val)
    # Saving the file as an excel file
    xldoc.save(r"C:\\Users\\Documents\\restored_data\\" + file + ".xlsx", 51)   


    #need assistance with code to loop over fixed(restored) multiple excel files, combine, e.g.all or 
only first 10 into one dataframe

ERROR MESSAGE BELOW

*20181124_file_01.csv
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
<ipython-input-37-17a38b97f646> in <module>
4     file= os.path.splitext(filename)[0]
5     # Opening the file using 'utf-16' encoding
6     file1 = io.open(filename, "r", encoding="utf-16")[0]
7     data = file1.readlines()
8     xldoc = Workbook()
FileNotFoundError: [Errno 2] No such file or directory: '20181124_file01.csv'*   

1 Ответ

0 голосов
/ 30 января 2020

Код должен быть:

for filename in os.listdir(file_dir):
    print(filename)
    file = os.path.join(file_dir, os.path.splitext(filename)[0])
    with open(os.path.join(file_dir, filename), "r", encoding="utf-16") as fh:

        xldoc = Workbook(fh) ## think you can use a file handle as a reference here.
        # Adding a sheet to the workbook object
        sheet = xldoc.add_sheet("Sheet1", cell_overwrite_ok=True)

listdir возвращает только имя файла, а не весь путь к файлу.

Может также стоить поместить оператор with вокруг вашего вызова на io.open, чтобы уничтожить ссылки после использования.

Недостаточно памяти - ссылка на каждую рабочую книгу должна быть уничтожена перед открытием следующей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...