python中csv文件中循环的输出

python中csv文件中循环的输出,python,csv,Python,Csv,在这个脚本中,我必须解析一些URL并将输出打印到CSV文件中 import requests import CSV from urllib.parse import urlparse with open(r'C:\Users\acer\Desktop\Project\WordPress\output.csv', 'w', newline='') as file: ==>doubt writer = csv.writer(file)

在这个脚本中,我必须解析一些URL并将输出打印到CSV文件中

import requests
import CSV
from urllib.parse import urlparse

with open(r'C:\Users\acer\Desktop\Project\WordPress\output.csv', 'w', newline='') as file: ==>doubt
    writer = csv.writer(file)                                                              ==>doubt
def content_length(domain):
    try:
        r = requests.get(domain.strip())
        surl = r.url
        urlp = urlparse(surl)
        furl = urlp.scheme + '://' + urlp.hostname + '/'
        rd = requests.get(furl.strip())
        rdstat = rd.status_code
        #print(rdstat)
        if rd.status_code == 403:
            rdmsg = '403 - Forbidden'
        elif rd.status_code == 200:
            r1 = requests.get(furl, stream = True)
            c_length = r1.headers['content-length']
            rdmsg = c_length
        else:
            rdmsg = 'Not Available'
            #print (rdmsg)
        final_print = str(rdstat) + (',') + rdmsg
        print(final_print)
        writer.writerow(["Source Url", "Final Url", "Status Code", "Content-Length"])  ==>doubt
        writer.writerow([surl,furl,str(rdstat),rdmsg])                                 ==>doubt

    except Exception as e:
        print(domain.strip() + ',' + 'Exception')
        print(e)


print('Response Status Code,Content Length')





with open(r'C:\Users\acer\Desktop\Project\WordPress\domains.txt', 'r') as domlist:
    for dom in domlist:
        content_length(dom)

在这里,我的问题是我必须为每次迭代(即文本文件中的每个url)在CSV文件中添加输出。但是,我不知道在哪里添加CSV的代码段

您可以尝试重新构造代码,这样就不用先发出一个请求,然后再写一行;尝试发出所有请求,将数据放入列表,然后将这些列表写入csv文件

您可以通过返回数据而不是将其写入
content\u length
函数来完成此操作:

def content_length(domain):
    try:
        r = requests.get(domain.strip())
        surl = r.url
        urlp = urlparse(surl)
        furl = urlp.scheme + '://' + urlp.hostname + '/'
        rd = requests.get(furl.strip())
        rdstat = rd.status_code
        #print(rdstat)
        if rd.status_code == 403:
            rdmsg = '403 - Forbidden'
        elif rd.status_code == 200:
            r1 = requests.get(furl, stream = True)
            c_length = r1.headers['content-length']
            rdmsg = c_length
        else:
            rdmsg = 'Not Available'
            #print (rdmsg)
        final_print = str(rdstat) + (',') + rdmsg
        print(final_print)
        return [surl,furl,str(rdstat),rdmsg]

    except Exception as e:
        print(domain.strip() + ',' + 'Exception')
        print(e)
这将返回一个列表,该列表将是您要写入的行。现在,您需要另一个函数从域文件中获取所有“行”:

def all_domains():
    dom_data = []
    with open(r'C:\Users\acer\Desktop\Project\WordPress\domains.txt', 'r') as file:
        domlist = file.readlines()
        for dom in domlist:
            cl = content_length(dom)
            dom_data.append(cl)
    return dom_data
现在,您可以使用
write\u rows
所有\u域的结果写入csv:

domains = all_domains()
with open(r'C:\Users\acer\Desktop\Project\WordPress\output.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    # Write headers
    writer.writerow(["Source Url", "Final Url", "Status Code", "Content-Length"])
    # Write domains
    writer.writerows(domains)
此外,当您导入文件顶部的
csv
包时,请确保该文件是小写而不是大写的“csv”,因为这将引发豁免

希望这有帮助