Как читать определенные текстовые файлы из нескольких файлов в подкаталогах в Python - PullRequest
2 голосов
/ 10 июля 2019

У меня есть одна папка, в ней содержится 5 подпапок.Каждая подпапка содержит несколько файлов «x.txt», «y.txt» и «z.txt», и она повторяется в каждой подпапке. Теперь мне нужно прочитать и распечатать только файл «y.txt» из всех подпапок,Моя проблема в том, что я не могу читать и распечатывать файлы y.txt.Подскажите, как решить эту проблему.

Ниже приведен мой код, который я написал для чтения файла y.txt

import os, sys
import pandas as pd

file_path = ('/Users/Naga/Desktop/Python/Data')
for root, dirs, files in os.walk(file_path):    
    for name in files:       
       print(os.path.join(root, name))
       pd.read_csv('TextInformation.txt',delimiter=";", names = ['Name', 'Value'])

Ошибка: файл TextInformation.txt не существует: 'TextInformation.txt'

Ответы [ 3 ]

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

Ваша проблема забыта при добавлении родительского пути к файлу 'y.txt'. Я предлагаю этот код для вас, надеюсь, он поможет.

import os
pth = '/Users/Naga/Desktop/Python/Data'
list_sub = os.listdir(pth)
filename = 'TextInformation.txt'
for sub in list_sub:
    TextInfo = open('{}/{}/{}'.format(pth, sub, filename), 'r').read()
    print(TextInfo)
0 голосов
/ 10 июля 2019

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

import os
for dirPath,foldersInDir,fileName in os.walk(path_to_main_folder):
if fileName is not []:
    for file in fileName:
        if file.endswith('y.txt'):
            loc = os.sep.join([dirPath,file])
            y_txt = open(loc)
            y = y_txt.read()
            print(y)

Но имейте в виду, что {path_to_main} - это путь, в котором есть подпапки.

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

Вы также можете попробовать следующий подход для извлечения всех файлов y.txt из ваших подкаталогов:

import glob
import pandas as pd

# get all y.txt files from all subdirectories
all_files = glob.glob('/Users/Naga/Desktop/Python/Data/*/y.txt')

for file in all_files:
    data_from_this_file = pd.read_csv(file, sep=" ", names = ['Name', 'Value'])
    # do something with the data

Впоследствии вы можете применить свой код ко всем файлам в списке all_files.Самое замечательное в glob заключается в том, что вы можете использовать карточки (*).При их использовании вам не нужны имена подкаталогов (вы даже можете использовать их в имени файла, например, *y.txt).Также см. Документацию на glob .

...