当我运行脚本时,会在控制台中获得所需的输出,但是当我在csv文件中写入脚本时,输出变得难以辨认。我尝试过encoding="utf-8"
,但没有运气,还是一样。
这些是我愿意在csv文件中编写的内容部分。
অ অংশ অংশ অংশাংশি
。
到目前为止,我已经写过:
import csv
import requests
from bs4 import BeautifulSoup
url = "http://www.english-bangla.com/browse/bntobn/"
def get_links(link):
res = requests.get(link)
soup = BeautifulSoup(res.text,"lxml")
items = [item.text for item in soup.select("#cat_page ul > li > a")]
return items
if __name__ == '__main__':
with open("output.csv","w",newline="",encoding="utf-8") as f:
writer = csv.writer(f)
for item in get_links(url):
writer.writerow(item)
如何以正确的方式将内容写入csv文件?
答案 0 :(得分:1)
我怀疑这是您的问题:
writer.writerow(item)
writerow
方法需要一系列项目,其中每个项目都对应于csv文件中的一列。通常,您会以某种可迭代的方式来调用它,例如列表。例如:
writer.writerow(['one', 'two', 'three'])
将在您的csv文件中生成一个如下所示的条目:
one,two,three
在Python中,字符串也恰好是可迭代的。比较一下,我们传递一个项目的列表:
writer.writerow(['this is a test'])
以此,我们在其中传递一个字符串:
writer.writerow('this is a test')
前者将导致:
this is a test
后者将导致:
t,h,i,s, ,i,s, ,a, ,t,e,s,t
因此,您可能想像这样编写主块:
if __name__ == '__main__':
with open("output.csv","w",newline="",encoding="utf-8") as f:
writer = csv.writer(f)
for item in get_links(url):
writer.writerow([item])
或者,如@furas建议的那样,只需摆脱for
循环:
if __name__ == '__main__':
with open("output.csv","w",newline="",encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(get_links(url))
两种解决方案都能使您到达同一地点。第二个效率更高。
这将导致一个csv文件,如下所示:
অ
অংশ
অংশ
অংশাংশি
অংশান
.
.
.
答案 1 :(得分:0)
writerow()
需要元素列表,而不是单个元素。
然后将每个元素放在单独的列中(使用逗号)
with open("output.csv","w", newline="",encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(get_links(url))
如果您将单个元素-字符串-则将其视为字符列表
并将每个字符放在单独的列中-因此,在字符之间要用逗号分隔。