Ошибка неверного формата JSON при чтении в .txt файлах

1

У меня есть скрипт python, где я пытаюсь прочитать все.txt файлы в каталоге и определить, вернут ли они True или False для любых условий, которые есть в моем скрипте. У меня есть тысячи TXT файлов с текстом в формате.json. Тем не менее, я получаю сообщение об ошибке с неверным форматом.json. Я проверил, что мои текстовые файлы находятся в формате.json. Я хочу, чтобы скрипт определял, соответствует ли файл.txt любому из операторов в моем коде ниже. Затем я хочу вывести результат в файл csv. Ваша помощь очень ценится! Я включил свои сообщения об ошибках и пример.txt файла.

Пример.txt файла с.json formattting

{
    "domain_siblings": [
        "try.wisebuygroup.com.au",
        "www.wisebuygroup.com.au"
    ],
    "resolutions": [
        {
            "ip_address": "34.238.73.135",
            "last_resolved": "2018-04-22 17:59:05"
        },
        {
            "ip_address": "52.0.100.49",
            "last_resolved": "2018-06-24 17:05:06"
        },
        {
            "ip_address": "52.204.226.220",
            "last_resolved": "2018-04-22 17:59:06"
        },
        {
            "ip_address": "52.22.224.230",
            "last_resolved": "2018-06-24 17:05:06"
        }
    ],
    "response_code": 1,
    "verbose_msg": "Domain found in dataset",
    "whois": null
}

Сообщение об ошибке

line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Код

import os
import json
import csv

path=r'./output/'
csvpath='C:/Users/xxx/Documents/csvtest'
file_n = 'file.csv'

def vt_result_check(path):
    vt_result = False
    for filename in os.listdir(path):
        with open(path + filename, 'r') as vt_result_file:
            vt_data = json.load(vt_result_file)

        # Look for any positive detected referrer samples
        # Look for any positive detected communicating samples
        # Look for any positive detected downloaded samples
        # Look for any positive detected URLs
        sample_types = ('detected_referrer_samples', 'detected_communicating_samples',
                        'detected_downloaded_samples', 'detected_urls')
        vt_result |= any(sample['positives'] > 0 for sample_type in sample_types
                                                 for sample in vt_data.get(sample_type, []))

        # Look for a Dr. Web category of known infection source
        vt_result |= vt_data.get('Dr.Web category') == "known infection source"

        # Look for a Forecepoint ThreatSeeker category of elevated exposure
        # Look for a Forecepoint ThreatSeeker category of phishing and other frauds
        # Look for a Forecepoint ThreatSeeker category of suspicious content
        threats = ("elevated exposure", "phishing and other frauds", "suspicious content")
        vt_result |= vt_data.get('Forcepoint ThreatSeeker category') in threats

    return str(vt_result)


if __name__ == '__main__':
    with open(file_n, 'w') as output:
        for i in range(vt_result_file):
            output.write(vt_result_file, vt_result_check(path))
  • 0
    Я не получил ошибку при загрузке файла. Это, вероятно, проверки, которые вы осуществили, вызывая проблемы. Можете ли вы указать строку кода, на которой выдается ошибка?
  • 0
    Возможно, вы захотите ограничить ваш скрипт только синтаксическим анализом файлов с суффиксом .txt - см. Stackoverflow.com/questions/3964681/…
Теги:
python-3.x

3 ответа

0
Лучший ответ

Я предлагаю (1) ограничить ваш скрипт только .txt файлов .txt и (2) добавить некоторую базовую проверку ошибок в форме оператора try/except чтобы поймать любые ошибки JSON, которые происходят. Что-то вроде этого:

def vt_result_check(path):
    vt_result = False
    for file in os.listdir(path):
        if not file.endswith(".txt"): # skip anything that doesn't end in .txt
            continue

        with open(path + file, 'r') as vt_result_file:
            try:
                vt_data = json.load(vt_result_file)
                # do whatever you want with the json data
            except Exception:
                print("Could not parse JSON file " + file)

Вы можете заполнить остальную часть своего кода.

  • 0
    @i_alarmed_alien спасибо за вашу помощь! Это, казалось, исправило мою первоначальную ошибку, но теперь я получаю другую ошибку. Сообщение об ошибке: output.write ((vt_result_check (path))) TypeError: аргумент write () должен быть str, а не int Как мне преобразовать vt_result_check (path) в int?
  • 0
    чтобы преобразовать что-либо в строку, используйте str() - например, str(vt_result_check(path)) . Ознакомьтесь с документацией по Python, поскольку вся эта информация находится здесь: docs.python.org/3/library/stdtypes.html#str
1

Вы пытаетесь декодировать JSON из пустого файла (размер 0). Проверьте свой путь к файлу и содержимое этого файла.

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

  • 0
    @Andrej_Kesely спасибо за вашу помощь! Это, казалось, исправило мою первоначальную ошибку, но теперь я получаю другую ошибку. Сообщение об ошибке: output.write ((vt_result_check (path))) TypeError: аргумент write () должен быть str, а не int Как мне преобразовать vt_result_check (path) в int?
  • 0
    @bedford Вы возвращаете int из своей функции vt_result_check(path) . Проверьте операторы возврата внутри него. Вам нужно вернуть строку.
Показать ещё 4 комментария
0

Вы не открываете файлы...

for filename in os.listdir(path):
    with open(path + filename, 'r') as vt_result_file:
        vt_data = json.load(vt_result_file)

listdir - перечислены все каталоги и файлы в пути.

  • 0
    os.listdir(path='.') : Возвращает список, содержащий имена записей в каталоге, заданных путем. Список приведен в произвольном порядке и не содержит специальных записей «.» и «..», даже если они присутствуют в каталоге.
  • 0
    @ Орехи Спасибо за ваш ответ! Я попробовал ваше рекомендуемое изменение, но, к сожалению, я все еще получаю то же сообщение об ошибке. Есть ли у вас другие советы?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню