当我运行我的脚本时,我在控制台中获得所需的输出,但是当我在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文件中编写内容?
writerow()
需要元素列表,而不是单个元素。
然后它将每个元素放在分隔列中(使用逗号)
with open("output.csv","w", newline="",encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(get_links(url))
如果你把单个元素 - 字符串 - 然后它将其视为字符列表 并且它将每个字符串放在单独的列中 - 因此您在字符之间使用逗号。
我怀疑这是你的问题:
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文件看起来像:
অ
অংশ
অংশ
অংশাংশি
অংশান
.
.
.