У меня есть скрипт 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))
Я предлагаю (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)
Вы можете заполнить остальную часть своего кода.
str()
- например, str(vt_result_check(path))
. Ознакомьтесь с документацией по Python, поскольку вся эта информация находится здесь: docs.python.org/3/library/stdtypes.html#str
Вы пытаетесь декодировать JSON из пустого файла (размер 0
). Проверьте свой путь к файлу и содержимое этого файла.
Примечание: пример, который вы предоставили в своем вопросе, является допустимым JSON, он должен загружаться без проблем.
int
из своей функции vt_result_check(path)
. Проверьте операторы возврата внутри него. Вам нужно вернуть строку.
Вы не открываете файлы...
for filename in os.listdir(path):
with open(path + filename, 'r') as vt_result_file:
vt_data = json.load(vt_result_file)
listdir - перечислены все каталоги и файлы в пути.
os.listdir(path='.')
: Возвращает список, содержащий имена записей в каталоге, заданных путем. Список приведен в произвольном порядке и не содержит специальных записей «.» и «..», даже если они присутствуют в каталоге.
.txt
- см. Stackoverflow.com/questions/3964681/…