Перемещение по каталогу больших локальных файлов Excel с удаленного сервера вызывает повторный доступ к одним и тем же файлам - PullRequest
0 голосов
/ 01 июля 2019

Я использую предоставленную поставщиком среду jupyter, размещенную на удаленном сервере, файлы проекта хранятся локально.

У меня есть куча файлов Excel, из которых я читаю данные, и использую API поставщика для получения других полей.

Я столкнулся с проблемой, когда, если я использую os.listdir () для цикла, я продолжаю получать доступ к тем же файлам. Я чувствую, что приложение вендора периодически делает снимок моего каталога проекта для синхронизации, и если в то же время я нахожусь в процессе доступа к данным из большого файла Excel, итератор файла получает сброс к новому снимку, и я в итоге читаю то же самое файлы снова и снова.


for file in os.listdir(path):

    print(file)

    full_file_name=os.path.join(path,file)

    try:

        with pd.ExcelFile(full_file_name) as file_read:

            print(file_read)

            ## Code to read data from different tabs


Output:

Portfolio positions 3.xlsx
Portfolio positions 3.xlsx
<pandas.io.excel.ExcelFile object at 0x000001C8CB10BCF8>
Portfolio positions 3.xlsx
<pandas.io.excel.ExcelFile object at 0x000001C8CB10BCF8>
Portfolio positions 4.xlsx
Portfolio positions 3.xlsx
<pandas.io.excel.ExcelFile object at 0x000001C8CB10BCF8>
Portfolio positions 4.xlsx
<pandas.io.excel.ExcelFile object at 0x000001C8CAF12908>
Portfolio positions 3.xlsx
<pandas.io.excel.ExcelFile object at 0x000001C8CB10BCF8>
Portfolio positions 4.xlsx
<pandas.io.excel.ExcelFile object at 0x000001C8CAF12908>
Portfolio positions 5.xlsx
Portfolio positions 3.xlsx
<pandas.io.excel.ExcelFile object at 0x000001C8CB10BCF8>
...
etc

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

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

Я не думаю, что это то, что происходит с вами, я понимаю Python, что os.listdir () вызывается один раз.Тем не менее, я не могу объяснить поведение, которое вы видите, и поэтому все равно рекомендую защититься от него.

Попробуйте собрать файлы в список и затем обработать их.

full_file_names = []
for _file in os.listdir(path):
    print(_file)
    full_file_names.append(os.path.join(path, _file))

for full_file in full_file_names:
    try:
        ...

Также старайтесь не использовать file, поскольку он маскирует встроенный.

0 голосов
/ 01 июля 2019

Я не могу сказать, почему у вас возникла эта проблема, но простым решением было бы сначала прочитать файлы в список и создать набор, который будет перебирать только уникальные имена файлов.

files = set(os.listdir(path))
for filename in files:
    print(filename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...