Python逐行写入CSV
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/37289951/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Python write to CSV line by line
提问by Mustard Tiger
I have data which is being accessed via http request and is sent back by the server in a comma separated format, I have the following code :
我有通过 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)
The content of text is as follows:
正文内容如下:
april,2,5,7
may,3,5,8
june,4,7,3
july,5,6,9
How can I save this data into a CSV file. I know I can do something along the lines of the following to iterate line by line:
如何将此数据保存到 CSV 文件中。我知道我可以按照以下内容逐行迭代:
import StringIO
s = StringIO.StringIO(text)
for line in s:
But i'm unsure how to now properly write each line to CSV
但我不确定现在如何正确地将每一行写入 CSV
EDIT---> Thanks for the feedback as suggested the solution was rather simple and can be seen below.
编辑--->感谢您的反馈建议解决方案相当简单,可以在下面看到。
Solution:
解决方案:
import StringIO
s = StringIO.StringIO(text)
with open('fileName.csv', 'w') as f:
for line in s:
f.write(line)
回答by Ani Menon
General way:
一般方式:
##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')
OR
或者
Using CSV writer :
使用 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)
OR
或者
Simplest way:
最简单的方法:
f = open('csvfile.csv','w')
f.write('hi there\n') #Give your csv text here.
## Python will convert \n to os.linesep
f.close()
回答by Vishwa
You could just write to the file as you would write any normal file.
您可以像写入任何普通文件一样写入文件。
with open('csvfile.csv','wb') as file:
for l in text:
file.write(l)
file.write('\n')
If just in case, it is a list of lists, you could directly use built-in csv
module
如果以防万一,它是一个列表列表,您可以直接使用内置csv
模块
import csv
with open("csvfile.csv", "wb") as file:
writer = csv.writer(file)
writer.writerows(text)
回答by icedwater
I would simply write each line to a file, since it's already in a CSV format:
我会简单地将每一行写入一个文件,因为它已经是 CSV 格式:
write_file = "output.csv"
with open(write_file, "w") as output:
for line in text:
output.write(line + '\n')
I can't recall how to write lines with line-breaks at the moment, though :p
我现在不记得如何用换行符写行了:p
Also, you might like to take a look at this answerabout write()
, writelines()
, and '\n'
.
此外,你可能想看看这个答案约write()
,writelines()
和'\n'
。
回答by jrm
To complement the previous answers, I whipped up a quick class to write to CSV files. It makes it easier to manage and close open files and achieve consistency and cleaner code if you have to deal with multiple files.
为了补充之前的答案,我创建了一个快速课程来写入 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
Example usage:
用法示例:
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()))
Have fun
玩得开心
回答by Vlad Bezden
What about this:
那这个呢:
with open("your_csv_file.csv", "w") as f:
f.write("\n".join(text))
str.join()Return a string which is the concatenation of the strings in iterable. The separator between elements is the string providing this method.
str.join()返回一个字符串,它是可迭代中字符串的串联。元素之间的分隔符是提供此方法的字符串。