如何逐行写 CSV?

我有数据正在通过 http 请求访问,并由服务器以逗号分隔的格式发送回来,我有以下代码:

site= 'www.example.com'
hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(site,headers=hdr)
page = urllib2.urlopen(req)
soup = BeautifulSoup(page)
soup = soup.get_text()
text=str(soup)

案文内容如下:

april,2,5,7
may,3,5,8
june,4,7,3
july,5,6,9

如何将此数据保存到 CSV 文件中。 我知道我可以按照下面的方法一行一行地迭代:

import StringIO
s = StringIO.StringIO(text)
for line in s:

但我不确定现在如何正确地写每一行到 CSV

编辑—— > 感谢您的反馈,因为建议的解决方案是相当简单的,可以在下面看到。

解决方案:

import StringIO
s = StringIO.StringIO(text)
with open('fileName.csv', 'w') as f:
for line in s:
f.write(line)
454818 次浏览

我会简单地把每一行写到一个文件中,因为它已经是 CSV 格式了:

write_file = "output.csv"
with open(write_file, "wt", encoding="utf-8") as output:
for line in text:
output.write(line + '\n')

不过,我现在想不起来如何用换行符来写行: p

另外,您可能想看一下 这个答案关于 write()writelines()'\n'的内容。

您可以像写任何普通文件一样直接写入该文件。

with open('csvfile.csv','wb') as file:
for l in text:
file.write(l)
file.write('\n')

如果只是以防万一,它是一个列表列表,您可以直接使用内置的 csv模块

import csv


with open("csvfile.csv", "wb") as file:
writer = csv.writer(file)
writer.writerows(text)

一般方法:

##text=List of strings to be written to file
with open('csvfile.csv','wb') as file:
for line in text:
file.write(line)
file.write('\n')

或者

使用 CSV 作者:

import csv
with open(<path to output_csv>, "wb") as csv_file:
writer = csv.writer(csv_file, delimiter=',')
for line in data:
writer.writerow(line)

或者

最简单的方法:

f = open('csvfile.csv','w')
f.write('hi there\n') #Give your csv text here.
## Python will convert \n to os.linesep
f.close()

这个怎么样:

with open("your_csv_file.csv", "w") as f:
f.write("\n".join(text))

Join () 返回一个字符串,它是 iterable 中字符串的串联。 元素之间的分隔符是 提供此方法的字符串。

为了补充前面的答案,我迅速创建了一个快速类来编写 CSV 文件。如果您必须处理多个文件,它使得管理和关闭打开的文件变得更加容易,并且实现了一致性和清晰的代码。

class CSVWriter():


filename = None
fp = None
writer = None


def __init__(self, filename):
self.filename = filename
self.fp = open(self.filename, 'w', encoding='utf8')
self.writer = csv.writer(self.fp, delimiter=';', quotechar='"', quoting=csv.QUOTE_ALL, lineterminator='\n')


def close(self):
self.fp.close()


def write(self, elems):
self.writer.writerow(elems)


def size(self):
return os.path.getsize(self.filename)


def fname(self):
return self.filename

示例用法:

mycsv = CSVWriter('/tmp/test.csv')
mycsv.write((12,'green','apples'))
mycsv.write((7,'yellow','bananas'))
mycsv.close()
print("Written %d bytes to %s" % (mycsv.size(), mycsv.fname()))

玩得开心

在我这种情况下。

  with open('UPRN.csv', 'w', newline='') as out_file:
writer = csv.writer(out_file)
writer.writerow(('Name', 'UPRN','ADMIN_AREA','TOWN','STREET','NAME_NUMBER'))
writer.writerows(lines)

您需要在 open属性中包含 newline选项,这样就可以了

Https://www.programiz.com/python-programming/writing-csv-files