Панды не могут читать те же файлы JSON, сохраненные в подпапке - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть 5 файлов json, сохраненных в моем текущем рабочем каталоге, и следующий код прекрасно работает для меня, чтобы прочитать каждый из них для дальнейшего анализа:

import pandas as pd
import os
path=os.path.join('.') #Just want to as an example here
allfiles = os.listdir(path)
files = [files for files in allfiles if files.endswith('.json')]

for i in files:
    df=pd.read_json(i)
allfiles

Но когда я создаю подпапку вмой текущий рабочий каталог и переместить в него мои 5 json-файлов, затем я не могу их прочитать:

import pandas as pd
import os
path=os.path.join('.','Result')#New Folder:Result
allfiles = os.listdir(path)
files = [files for files in allfiles if files.endswith('.json')]

for i in files:
    df=pd.read_json(i)
allfiles

Сообщение об ошибке: ValueError: Конечные данные Я пытаюсь найти его черезGoogle, но до сих пор не знаю, что происходит, я ничего не изменил, просто создать подпапку.

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

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

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

cwd = os.getcwd()
path=os.path.join(cwd) #Just want to as an example here
allfiles = os.listdir(path)
files = [os.path.join(path,files) for files in allfiles if files.endswith('.json')]
print(files)

for f in files :
    df1 = pd.read_json(f)
print(df1.head(1))

['C: \ Users \ XXX \ XXX \ XXX \ all_data.json']

глоссарий GlossDiv {'title': 'S', 'GlossList': {'GlossEntry': {'I ...


path=os.path.join(cwd,'Result') #Just want to as an example here
allfiles = os.listdir(path)
files = [os.path.join(path,files) for files in allfiles if files.endswith('.json')]
print(files)
for f in files :
    df1 = pd.read_json(f)
print(df1.head(1))

['C: \ Users \ XXX \ XXX \ XXX \ Result \ all_data1.json']

глоссарий GlossDiv {'title': 'S', 'GlossList': {'GlossEntry': {'I ...

пример данных в файле:

 {
        "glossary": {
            "title": "example glossary",
            "GlossDiv": {
                "title": "S",
                "GlossList": {
                    "GlossEntry": {
                        "ID": "SGML",
                        "SortAs": "SGML",
                        "GlossTerm": "Standard Generalized Markup Language",
                        "Acronym": "SGML",
                        "Abbrev": "ISO 8879:1986",
                        "GlossDef": {
                            "para": "A meta-markup language, used to create markup languages such as DocBook.",
                            "GlossSeeAlso": ["GML", "XML"]
                        },
                        "GlossSee": "markup"
                    }
                }
            }
        }
    }
0 голосов
/ 23 ноября 2018

Вы можете использовать glob.glob, который возвращает список путей, соответствующих вашему pathname:

import glob
pathname = 'Result/*.json'
list_of_paths_to_files = glob.glob(pathname)

Если вы хотите прочитать столько файлов, сколько отдельных DataFrame:

list_of_dataframes = [pd.read_json(file_path) for file_path in list_of_paths_to_files]

Если вы хотите один DataFrame:

df = pd.concat(list_of_dataframes)
0 голосов
/ 23 ноября 2018

Попробуйте Текущий рабочий каталог, а затем присоединитесь к новому подкаталогу.

cwd = os.getcwd()
path=os.path.join(cwd,'Result')#New Folder:Result

Я только что проверил код на .pdf, так как у меня pdf в каталоге загрузок.

import pandas as pd
import os
cwd = os.getcwd()
path=os.path.join(cwd,"Downloads")#New Folder:Result
allfiles = os.listdir(path)
files = [files for files in allfiles if files.endswith('.pdf')]

for i in files:
    print i

У меня это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...