Python не закрывает файл, Windows 10 - PullRequest
0 голосов
/ 22 мая 2019

Чтение CSV-файла в Jupyter:

filename = "myfile.csv"
start_pd = time.time()
try:
    with open (filename, 'rb') as file:
        reader = pd.read_csv(filename, chunksize=10000, error_bad_lines=False, header=None)
        df = pd.concat([x for x in reader], ignore_index=True)
        df.columns = dfcolslist
        file.close #also tried reader.close() and file.closed
    print("{} read successfully in {:.2f} secs".format(filename, time.time() - start_pd))
except IOError:
    print("could not read {}".format(filename))

cmd сообщение об ошибке:

> ren "myfile.csv" "date_myfile.csv"
The process cannot access the file because it is being used by another process.

Сообщение об ошибке GUI:

The action cannot be completed because the file is open in Python

1 Ответ

2 голосов
/ 22 мая 2019

Поскольку вы передаете строку в pd.read_csv, она пытается открыть уже открытый файл.

Его документация говорит

filepath_or_buffer: str, path path или file-like object Любой допустимый путь строки приемлем. Строка может быть URL. Действительный URL схемы включают в себя http, ftp, s3 и file. Для файловых URL, хост ожидается. Локальный файл может быть: file: //localhost/path/to/table.csv.

Если вы хотите передать объект пути, pandas принимает либо pathlib.Path или py._path.local.LocalPath.

Под файловым объектом мы ссылаемся на объекты с методом read (), такими как обработчик файла (например, через встроенную функцию открытия) или StringIO.

Или:

  • Передать имя файла в виде строки в pd.read_csv и позволить ему самостоятельно обрабатывать открытие, чтение и закрытие файла:

    reader = pd.read_csv(filename, chunksize=10000, error_bad_lines=False, header=None)
    
  • Или, , откройте файл самостоятельно, используя with open и передайте объект файла в pd.read_csv:

    with open (filename, 'rb') as file:
        reader = pd.read_csv(file, chunksize=10000, error_bad_lines=False, header=None)
    

В любом случае вы не должны звонить .close() самостоятельно.

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