Python 使用dict_writer将行追加到csv
我使用以下代码将行附加到现有csv文件:Python 使用dict_writer将行追加到csv,python,python-2.7,csv,Python,Python 2.7,Csv,我使用以下代码将行附加到现有csv文件: counter=1 for thepage in newpages: web_page = urllib2.urlopen(thepage) soup = BeautifulSoup(web_page.read()) fieldnames=["var1", "var2","var3","var4","var5", "var6", "var7"] if counter==1: f = ope
counter=1
for thepage in newpages:
web_page = urllib2.urlopen(thepage)
soup = BeautifulSoup(web_page.read())
fieldnames=["var1", "var2","var3","var4","var5", "var6", "var7"]
if counter==1:
f = open('file.csv', 'wb')
my_writer = csv.DictWriter(f, fieldnames)
my_writer.writeheader()
f.close()
variables={ele:"MISSING" for ele in fieldnames}
variables['var1']=str(counter)
variables['var2']=soup.find_all('strong')[0].text
variables['var3']=soup.find_all('p')[1].text[0]
variables['var4']=soup.find_all('p')[1].text[1]
variables['var4']=soup.find_all('p')[2].text
variables['var6']=soup.find_all('p')[6].text
variables['var7']=soup.find_all('p')[7].text
print variables
with open('file.csv', 'r+b') as f:
header = next(csv.reader(f))
dict_writer = csv.DictWriter(f, header)
dict_writer.writerow(variables)
counter+=1
在循环中创建“变量”字典。循环继续运行,没有问题,但当我查看csv文件时,它已停止在第30行或多或少附加行。我已经检查过了,“变量”字典没有问题,即使我更改了文件并使用了其他变量,在同一行中也或多或少会失败。有什么问题吗 问题是,我认为,您每次都在覆盖该文件。它正在以模式
'r+b'
打开,这会将文件指针定位到文件的开头。因此,后续写入将覆盖文件先前的内容
您可以在追加模式下打开文件,这可以使用模式'ab'
完成
话虽如此,但无需持续打开文件,也无需在for循环体中输出CSV头。我建议如下:
import csv
counter=1
fieldnames=["var1", "var2","var3","var4","var5", "var6", "var7"]
with open('file.csv', 'wb') as f:
my_writer = csv.DictWriter(f, fieldnames)
my_writer.writeheader()
for thepage in newpages:
web_page = urllib2.urlopen(thepage)
soup = BeautifulSoup(web_page.read())
variables={ele:"MISSING" for ele in fieldnames}
variables['var1']=str(counter)
variables['var2']=soup.find_all('strong')[0].text
variables['var3']=soup.find_all('p')[1].text[0]
variables['var4']=soup.find_all('p')[1].text[1]
variables['var4']=soup.find_all('p')[2].text
variables['var6']=soup.find_all('p')[6].text
variables['var7']=soup.find_all('p')[7].text
print variables
my_writer.writerow(variables)
counter+=1
你能给我们看更多的代码吗?我们需要一个,您单独发布的代码不足以复制您的问题。您确定这是完整的代码吗?你们在哪里设置柜台?有没有可能在第30排之后,您将计数器重置为1?我忘记将其放入问题中(我再次更新)。这不是任何字典或变量的问题。我在循环中添加了一个打印,看起来一切都很正常。你的意思是将open('file.csv','r+b')更改为f:to with open('file.csv','ab')作为f:?建议的替代方案看起来是一种更好的方法-我不认为
csv
模块的读卡器和写卡器真的支持文件的当前位置,在它不知情的情况下开始更改。另外,计数器
可能不再需要了…@user2246905:是的,open('file.csv','ab')
将以二进制附加模式打开文件。@user2246905:为什么您仍在尝试读取文件?无论如何,请尝试a+b
,它将打开进行读写。我建议您阅读的文档。您是对的唯一问题是将“r+b”更改为“a+b”