Столкновение со странной проблемой "фантомной файловой системы" в Python - PullRequest
0 голосов
/ 24 апреля 2019

Впервые я заметил эту проблему немного раньше, когда опубликовал эту тему .По сути, я получаю очень странную проблему, когда Python «видит» файлы, которые на самом деле не существуют в моем файловом браузере при работе с файлами.

Как, например, если я открою файл с абсолютным путем, изменим и выведу его содержимое через Python, он напечатает именно то, что должен.Но когда я пытаюсь открыть тот же файл по тому же пути absolute в моем файловом браузере Windows, файл не обновляется с моими изменениями.

Недавно я также столкнулся с подобной проблемой -переименование файлов.Вот простой скрипт, который я написал, чтобы заменить все пробелы в именах файлов символами подчеркивания.

rename.py:

import os

i = 0
path = "E:/sample_path/"

for filename in os.listdir(path):
    src = path + filename
    dst = path + filename.replace(" ", "_")

    os.rename(src, dst)
    i += 1

print(str(i) + " files processed.")

После выполнения некоторых распечаток в Python я вижучто все файлы в каталоге переименовываются правильно, но он просто не корректно обновлялся, когда я действительно просматривал каталог.Как в файловом браузере, так и при использовании команды dir.Как и в случае создания новых файлов в Python, они существуют в глазах Python, но их нет в Windows, даже если скрытые файлы видны и все такое.

Теперь по интересной части: Этот скрипт работает, если я открываю редактор python в cmd и импортирую его .Так что я знаю, что все правильно, никаких синтаксических ошибок или чего-то еще - это просто странная ошибка, возникающая с Python.

Например, если я зайду в командную строку и введу python rename.py, он не вернет никаких ошибок ивыдаст даже правильные результаты - x files processed., но на самом деле он не изменит какие-либо "настоящие" файлы.

Но если я зайду в командную строку и наберу python, чтобы вызвать редактор cmd, введите import rename дает правильный вывод и корректно обновляет все файлы.Так что пока этот обходной путь помогает, но это очень странная проблема, и я еще не видел, чтобы кто-то еще сталкивался с этим.Как будто Python создает временную копию файловой системы и не завершает синхронизацию с Windows.

Я несколько раз пытался переустановить Python, как для x64, так и для x86, и пока ничего не исправлено.

РЕДАКТИРОВАТЬ: Вот упрощенный пример, иллюстрирующий мою проблему.

write.py:

f = open("newfile.txt", "w+")
f.write("hello new file")
f.close()

read.py:

f = open("newfile.txt", "r")

for l in f.readlines():
   print(l)

Если я запускаюwrite.py, ошибки не возвращаются.Но также файл с именем newfile.txt не виден в моем текущем рабочем каталоге .Однако, если я запускаю read.py, он печатает hello new file.Очевидно, что оба они обращаются к одному и тому же невидимому файлу.

enter image description here

...