Существует проблема, когда я пытаюсь записать данные с помощью csv.writer - PullRequest
0 голосов
/ 24 октября 2019
import requests
import urllib as ulb
import re
import csv

temp= r"C:\Users\ATP\Desktop"+'\\'+"data"
with open(temp + '.csv', 'a', newline='') as f:
    csvwriter = csv.writer(f, dialect='excel')
    csvwriter.writerow(['ID', 'total', 'share', 'rate', 'employee', 'social', 'stake', 'environment'])
for i in range(1,184):
    url = (
        'http://stockdata.stock.hexun.com/zrbg/data/zrbList.aspx?date={}-12-31&count=20&pname=20&titType=null&page={}&callback=hxbase_json11571728040603'.format(
            2018, i))
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'}
    req = ulb.request.Request(url=url, headers=headers)
    response = ulb.request.urlopen(req)
    html1 = response.read().decode('gbk')

    id = re.findall(r'(?<=\()\d\d\d\d\d\d(?=\))',html1)
    total = re.findall(r'(?<=industryrate:\').+?(?=\')',html1)
    share = re.findall(r'(?<=stockNumber:\').+?(?=\')',html1)
    rate = re.findall(r'(?<=Pricelimit:\').+?(?=\')',html1)      
    employee = re.findall(r'(?<=lootingchips:\').+?(?=\')',html1)

    social = re.findall(r'(?<=Strongstock:\').+?(?=\')',html1)

    stake = re.findall(r'(?<=Scramble:\').+?(?=\')',html1)
    environment = re.findall(r'(?<=rscramble:\').+?(?=\')',html1)  

    for a,b,c,d,e,f,g,h in zip(id,total,share,rate,employee,social,stake,environment):

        with open(temp+'.csv','a',newline = '\n',encoding='gbk') as f:
            csvwriter = csv.writer(f,dialect='excel')
            csvwriter.writerow([a,b,c,d,e,f,g,h])

Код выше. И проблема в переменной «social», которая является столбцом «social» в файле csv.
Если я запускаю «print (social)», данные или результаты могут отображаться, как и ожидалось.
Но когда этозаписывается в файл csv, в столбце «social» отображается « <_ io.TextIOWrapper name = 'C: \ Users \ ATP \ Desktop \ data.csv' mode = 'a' encoding = 'gbk'> ', а не данные, как ожидалось.
Кто-нибудь знает, как это исправить? Заранее спасибо. введите описание изображения здесь

1 Ответ

1 голос
/ 24 октября 2019

Вы переопределяете переменную f в цикле for. Измените выражение open на:

with open(temp+'.csv','a',newline = '\n',encoding='gbk') as fp: # as f will override the f of the foor loop

и, очевидно, измените csvwriter = csv.writer(f,dialect='excel') на csvwriter = csv.writer(fp,dialect='excel')

. Имейте в виду эту ошибку, чтобы объяснить себе, почему очень полезно вводить дополнительные символыи иметь значимые имена переменных.

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