如何在python中的for循环中正确地编写CSV文件



我使用以下代码从网页中抓取内容,最终目标是写入CSV。在第一次迭代中,我让这部分工作,但现在我的数据格式不同了,当我试图在excel中查看数据时,它会以一种被破坏的方式写入数据。

如果我使用";headline.text";在excel中查看时,数据被正确地放入一个单元格中。其中作为";child.text";被打包到一个单元格中,而不是基于逗号进行拆分。你会看到我试图清理";child.text";试图看看这是否是我的问题。

如果我删除";headline.text";从";z";再试一次,它的书写方式是excel显示每个单元格一个字母。最后,当在excel中查看时,我希望用逗号分隔的每个值都显示在一个单元格中,我相信我在结构化"中做了一些错误的事情(很多事情?(;z";和或当我写行时。

如有任何指导,我们将不胜感激。非常感谢。

csvwriter = csv.writer(csvfile) 
for heading in All_Heading:
driver.execute_script("return arguments[0].scrollIntoView(true);", heading)
print("------------- " + heading.text + " -------------")
ChildElement = heading.find_elements_by_xpath("./../div/div")
for child in ChildElement:
driver.execute_script("return arguments[0].scrollIntoView(true);", child)
#print(heading.text)
#print(child.text)
z = (heading.text, child.text)
print (z)
csvwriter.writerow(z)

当我打印";z";我得到以下信息:

('Flower', 'Afghani 3.5g Pre-Pack DetailsnGREEN GOLD ORGANICSnAfghani 3.5g Pre-PacknIndicanTHC: 16.2%n1/8 oz  -  n$45.00')

当我打印";z";使用将字符串拆分为"0"的旧代码;\n〃;我得到以下信息:

('Flower', "Cherry Limeade 3.5g Flower - BeWell Details', 'BE WELL', 'Cherry Limeade 3.5g Flower - BeWell', 'Hybrid', 'THC: 18.7 mg', '1/8 oz  -  ', '$56.67")

csv.writerow()采用可迭代元素,每个元素由编写器的分隔符分隔,即形成不同的单元格。

首先,让我们看看到目前为止你发生了什么:

  1. (heading.text,child.text(有两个元素,即两个单元格,heading.text和child.text
  2. (child.text(只是child.text(如果是(child.text**,**(,它将是一个元组(,字符串的元素是每个字母。因此,每个字母都有自己的单元格

要在一行中获得不同的单元格,我们需要在可迭代中使用单独的元素,因此我们需要像[header.text,child.text line 1,child.txt line 2,…]这样的可迭代。您将文本拆分为行是正确的,但行没有正确添加到其中。元组是不可变的,我将使用一个列表:

  1. 我们知道heading.text是取一个单元格,这样我们就可以从
row  = [heading.text] # this is what your z is
  1. 我们希望每一行都是一个单独的元素,这样我们就可以拆分child.text:
lines = child.text.split("n") 
# The text doesn’t start or end with a newline so this should suffice
  1. 现在我们希望每个元素都单独添加到行中,我们可以在列表中使用extend((方法:
row.extend(lines)
# [1, 2].extend([3, 4, 5]) would result in [1, 2, 3, 4, 5]

累积:

row  = [heading.text]
lines = child.text.split("n") 
row.extend(lines)

或者在一行中打开包装:

row = [heading.text, *child.text.split("n")] # You can also use a tuple here

相关内容

  • 没有找到相关文章

最新更新