Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python循环覆盖以前写入json文件的文本_Python_Sql_Json_Python 3.x - Fatal编程技术网

Python循环覆盖以前写入json文件的文本

Python循环覆盖以前写入json文件的文本,python,sql,json,python-3.x,Python,Sql,Json,Python 3.x,我有一个python脚本,它执行sql查询并将查询输出写入.json文件。但是,每次它为我写入json文件时,它都会覆盖以前写入的文本。我希望将每个sql查询写入一个新的单独的.json。下面是我不工作的代码。任何帮助都将不胜感激 from __future__ import print_function try: import psycopg2 except ImportError: raise ImportError('\n\033[33mpsycopg2 library

我有一个python脚本,它执行sql查询并将查询输出写入.json文件。但是,每次它为我写入json文件时,它都会覆盖以前写入的文本。我希望将每个sql查询写入一个新的单独的.json。下面是我不工作的代码。任何帮助都将不胜感激

from __future__ import print_function

try:
    import psycopg2
except ImportError:
    raise ImportError('\n\033[33mpsycopg2 library missing. pip install psycopg2\033[1;m\n')
    sys.exit(1)

import re
import sys
import json

DB_HOST = 'crt.sh'
DB_NAME = 'certwatch'
DB_USER = 'guest'
OUTPUT_DIR="output/"

def connect_to_db(domain_name):
    try:
        conn = psycopg2.connect("dbname={0} user={1} host={2}".format(DB_NAME, DB_USER, DB_HOST))
        cursor = conn.cursor()
        cursor.execute("SELECT ci.NAME_VALUE NAME_VALUE FROM certificate_identity ci WHERE ci.NAME_TYPE = 'dNSName' AND reverse(lower(ci.NAME_VALUE)) LIKE reverse(lower('%{}'));".format(domain_name))
    except:
        print("\n\033[1;31m[!] Unable to connect to the database\n\033[1;m")
    return cursor


def get_unique_emails(cursor, domain_name):
    unique_emails = []
    for result in cursor.fetchall():
        matches=re.findall(r"\'(.+?)\'",str(result))
        for email in matches:
            if email not in unique_emails:
                if "{}".format(domain_name) in email:
                    unique_emails.append(email)
    return unique_emails


def print_unique_emails(unique_emails):
    print("\033[1;32m[+] Total unique emails found: {}\033[1;m".format(len(unique_emails)))
    for unique_email in sorted(unique_emails):
        print(unique_email)


if __name__ == '__main__':
    filepath = 'test.txt'
    with open(filepath) as fp:
        for cnt, domain_name in enumerate(fp):
            print("Line {}: {}".format(cnt, domain_name))
            print(domain_name)

        domain_name = domain_name.rstrip()
        cursor = connect_to_db(domain_name)
        unique_emails = get_unique_emails(cursor, domain_name)
        print_unique_emails(unique_emails)
        outfilepath = OUTPUT_DIR + unique_emails + ".json"
        with open(outfilepath, 'w') as outfile:
            outfile.write(json.dumps(unique_emails, sort_keys=True, indent=4))
您当前正在打开要写入的文件。您想要附加到文件中。您可以通过将
w
更改为
a

with open(outfilepath, 'a') as outfile:
    outfile.write(json.dumps(unique_emails, sort_keys=True, indent=4))

您可以阅读
open()

上的文档,我认为这是因为您在编写json文件时没有循环,只有一次写入,所以它只写入一个文件。所以你需要做一些事情,就像你在。。。枚举(fp):。创建另一个for循环,在每个域上循环,并将输出目录+唯一电子邮件+“.json”更改为输出目录+域名+“.json”。

使用append而不是write。i、 在您的文件编写器中用“a”代替“w”。@sjaymj62谢谢您的帮助!如何配置代码将每个查询写入单独的.json文件?例如,如果我查询google.com和apple.com,我希望有google.com.json和apple.com.json文件。非常感谢您的帮助!谢谢你的帮助!如何配置代码将每个查询写入单独的.json文件?例如,如果我查询google.com和apple.com,我希望有google.com.json和apple.com.json文件。非常感谢您的帮助@bedford只需将
outputfilepath
的值更改为您希望调用的文件。
with open(outfilepath, 'a') as outfile:
    outfile.write(json.dumps(unique_emails, sort_keys=True, indent=4))