Как открыть .txt в папке, если .xls в другой папке с тем же именем - PullRequest
0 голосов
/ 03 сентября 2018

Есть две папки, содержащие данные отдельных лиц, одна папка с файлами .txt и другая папка с файлами .xls.

Folder1 :['A.txt', 'B.txt', 'C.txt']
Folder2 :['A.xls', 'B.xls', 'C.xls']

Я хочу открыть оба файла одного и того же человека и выполнить некоторые действия с файлом .txt на основе информации в файле .xls.

Вот что я попробовал:

Tpath = 'Path to Folder1'
Xpath = 'Path to Folder2'
for tfilename in glob.glob(os.path.join(Tpath)):
for tfile in os.listdir(Tpath):
    for xfilename in glob.glob(os.path.join(Xpath)):
        for xfile in os.listdir(Xpath):
            if (xfile[:-4] == tfile[:-4]):
                tdf = pd.read_csv(tfilename)
                xdf = pd.read_excel(xfilename)      

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

Но я не знаю, как это решить. Кто-нибудь может исправить мою ошибку здесь?

1 Ответ

0 голосов
/ 03 сентября 2018

Вы получаете ошибку разрешения, потому что tfilename и xfilename в конечном итоге представляют собой путь к каталогу, а не к файлу. Вы можете проверить это, используя print вместо read_csv и read_excel:

Tpath = r'\some\path\txt'
Xpath = r'\some\path\xls'
for tfilename in glob.glob(os.path.join(Tpath)):
    for tfile in os.listdir(Tpath):
        for xfilename in glob.glob(os.path.join(Xpath)):
            for xfile in os.listdir(Xpath):
                if (xfile[:-4] == tfile[:-4]):
                    print(tfilename)
                    print(xfilename)

Выходы

'\some\path\txt'
'\some\path\xls'

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

tdf = pd.read_csv(os.path.join(tfilename, tfile))
xdf = pd.read_excel(os.path.join(xfilename, xfile))

В этот момент вы можете изменить имена tfilename и xfilename, чтобы весь код стал более понятным.

Кроме того, я не уверен, почему ваш код вызывает os.path.join с одним аргументом. Это никак не влияет.

...