我正在尝试将列表直接保存为csv文件,但是当我打开csv文件时,每个字符之间都带有逗号。
我要保存的列表是['BUD','ABBV','MO','WEED.TO','TAP','CGC','ACB']。
def cannabisTickers():
if __name__ == '__main__':
resp = requests.get('https://finance.yahoo.com/u/yahoo-finance/watchlists/420_stocks/',
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'
})
assert '<table class="cwl-symbols' in resp.text
soup = BeautifulSoup(resp.text, 'html.parser')
table = soup.select_one('.cwl-symbols')
tickers = []
for row in table.select('tr'):
ticker = [cell.text for cell in row.select('td')]
if ticker:
tickers.append(ticker[0])
with open('cannabisTickers', 'w') as csvFile:
writer = csv.writer(csvFile)
writer.writerows(tickers)
csvFile.close()
print(tickers)
csv显示为
B,U,D
A,B,B,V
M,O
答案 0 :(得分:3)
由于tickers
是一个字符串列表,所以当您执行writer.writerows(tickers)
时,每个字符串都将作为一个字符列表并保存在csv中,因此BUD
变为['B,'U','D']
等等
这会使['BUD', 'ABBV', 'MO', 'WEED.TO', 'TAP', 'CGC', 'ACB']
变成[['B', 'U', 'D'], ['A', 'B', 'B', 'V'], ['M', 'O'], ['W', 'E', 'E', 'D', '.', 'T', 'O'], ['T', 'A', 'P'], ['C', 'G', 'C'], ['A', 'C', 'B']]
并被保存为这样。
因此,您要传递writer.writerows的列表列表,或将列表传递到writer.writerow。
所以假设tickers = ['BUD', 'ABBV', 'MO', 'WEED.TO', 'TAP', 'CGC', 'ACB']
代替
writer.writerows(tickers)
你想做
writer.writerows([tickers])
或
writer.writerow(tickers)
然后,csv会看起来像
BUD,ABBV,MO,WEED.TO,TAP,CGC,ACB
答案 1 :(得分:1)
好吧,您可以简单地使用原始文件写入操作,因为.csv
并没有任何特殊的编码,因此我们可以像访问.csv
一样访问/存储数据常规文本文件。
data = ['BUD', 'ABBV', 'MO', 'WEED.TO', 'TAP', 'CGC', 'ACB']
a = "".join([x + "," for x in data])[:-1]
open('cannabisTickers', 'w+').write(a)
输出CSV文件:-
BUD,ABBV,MO,WEED.TO,TAP,CGC,ACB
我倾向于使用上述方法,因为它不涉及模块的导入,使用原始文件处理,因此速度更快。