#python #pandas
#python #pandas
Вопрос:
Я пытаюсь перебирать папки и подпапки для доступа и чтения файлов CSV, прежде чем преобразовывать их в JSON. Вот код, над которым я работаю:
cursor = conn.cursor()
try:
# Specify the folder containing needed files
folderPath = 'C:\Users\myUser\Desktop\toUpload' # Or using input()
fwdPath = 'C:/Users/myUser/Desktop/toUpload'
for countries in os.listdir(folderPath):
for sectors in os.listdir(folderPath '\' countries):
for file in os.listdir(folderPath '\' countries '\' sectors):
data = pd.DataFrame()
filename, _ext = os.path.splitext(os.path.basename(folderPath '\' countries '\' file))
print(file ' ' filename ' ' sectors ' ' countries)
data = pd.read_csv(file)
# cursor.execute('SELECT * FROM SECTORS')
# print(list(cursor))
finally:
cursor.close()
conn.close()
Следующая строка печати возвращает файл с именем файла без расширения, а затем имена папок секторов и стран:
print(file ' ' filename ' ' sectors ' ' countries)
myfile.csv myfile WASHSector CTRYIrq
Теперь, когда дело доходит до чтения CSV, это займет много-много времени, и в конце O выдает следующую ошибку:
[Ошибка 2] Файл myfile.csv не существует
Ответ №1:
вам нужно указать pd.read_csv
полный путь к файлу, поэтому измените его на:
data = pd.read_csv(folderPath '\' countries '\' sectors '\' file)
Ответ №2:
Перед чтением файла csv вы должны составить полный путь к файлу, иначе pandas не сможет прочитать этот файл.
import os
# ...
path = os.path.join(folderPath, countries, sectors, file)
data = pd.read_csv(path)
Также вместо использования трех вложенных циклов for я рекомендую вам использовать этот os.walk
метод. Он будет автоматически повторяться по каталогам
>>> folderPath = 'C:\Users\myUser\Desktop\toUpload'
>>> for root, _, files in os.walk(folderPath):
>>> ... for f in files:
>>> ... pd.read_csv(os.path.join(root, f))
Комментарии:
1. Извините, это локальный каталог с именем
ai
. Я редактирую ответ прямо сейчас2. Основная причина, по которой я это делаю, заключается в том, что мне нужно имя каждой вложенной папки для добавления в файл позже
3. поэтому мне нужно знать, что этот файл находится в папке IRQ и подпапке WASH, чтобы добавить их в базу данных. Может
os.walk()
помочь и с этим.4. Ну, у вас есть имя subdir в корневой переменной. Это всего лишь рекомендация для повышения производительности, если вам неудобно ее использовать, не используйте ее 🙂
5. Я заинтересован в повышении производительности, поскольку для просмотра будут сотни и сотни папок.