Чтение файла .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.
Сообщение об ошибке графического интерфейса:
The action cannot be completed because the file is open in Python
комментирование строки закрытия ничего не меняет, проблема сохраняется
Таким образом, ваша проблема не в том, чтобы «закрыть файл», как следует из названия.
в сообщениях об ошибках говорится, что он «открыт» или «используется другим процессом», то есть не закрыт
Поскольку вы передаете строку pd.read_csv
, он пытается открыть уже открытый файл.
Его документация говорит
filepath_or_buffer : str, path object, or file-like object Any valid string path is acceptable. The string could be a URL. Valid URL schemes include http, ftp, s3, and file. For file URLs, a host is expected. A local file could be: file://localhost/path/to/table.csv.
If you want to pass in a path object, pandas accepts either pathlib.Path or py._path.local.LocalPath.
By file-like object, we refer to objects with a read() method, such as a file handler (e.g. via builtin open function) or 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()
самостоятельно.
Вы не должны называть
close
при использованииwith open...