在本文中,我们将带你了解为什么csvwriter.writerow在这篇文章中,我们将为您详细介绍为什么csvwriter.writerow的方方面面,并解答在每个字符后加逗号?常见的疑惑,同时我们还
在本文中,我们将带你了解为什么csvwriter.writerow在这篇文章中,我们将为您详细介绍为什么csvwriter.writerow的方方面面,并解答在每个字符后加逗号?常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的asp.net实例代码protected override void Render(HtmlTextWriter writer)、csv.reader / writer - 为什么迭代 CSV 对象会导致 writer 没有输出?、csv.writer写单词的每个字符、csv.writer在单独的列/单元格中写入单词的每个字符。
本文目录一览:- 为什么csvwriter.writerow()在每个字符后加逗号?(csv.writer()用法)
- asp.net实例代码protected override void Render(HtmlTextWriter writer)
- csv.reader / writer - 为什么迭代 CSV 对象会导致 writer 没有输出?
- csv.writer写单词的每个字符
- csv.writer在单独的列/单元格中写入单词的每个字符
为什么csvwriter.writerow()在每个字符后加逗号?(csv.writer()用法)
此代码打开url并/names
在末尾附加,然后打开页面并将字符串打印到test1.csv
:
import urllib2import reimport csvurl = ("http://www.example.com")bios = [u''/name1'', u''/name2'', u''/name3'']csvwriter = csv.writer(open("/test1.csv", "a"))for l in bios: OpenThisLink = url + l response = urllib2.urlopen(OpenThisLink) html = response.read() item = re.search(''(JD)(.*?)(\d+)'', html) if item: JD = item.group() csvwriter.writerow(JD) else: NoJD = "NoJD" csvwriter.writerow(NoJD)
但是我得到这个结果:
J,D,",", ,C,o,l,u,m,b,i,a, ,L,a,w, ,S,c,h,o,o,l,....
如果我将字符串更改为(“ JD”,“哥伦比亚法学院” ....),那么我得到
JD, Columbia Law School...)
我在文档中找不到如何指定分度符。
如果尝试使用delimenter
,则会出现此错误:
TypeError: ''delimeter'' is an invalid keyword argument for this function
谢谢您的帮助。
答案1
小编典典它需要一个字符串序列(例如:列表或元组)。您给它一个字符串。一个字符串也恰好是一个字符串序列,但是它是一个由1个字符串组成的序列,这不是您想要的。
如果只希望每行一个字符串,则可以执行以下操作:
csvwriter.writerow([JD])
这会用列表包装JD(字符串)。
asp.net实例代码protected override void Render(HtmlTextWriter writer)
protected override void Render(HtmlTextWriter writer){
//把最终要输出的html压缩后再输出
StringWriter html = new StringWriter();
HtmlTextWriter tw = new HtmlTextWriter(html);
base.Render(tw);
string outhtml = html.ToString();
outhtml = Regex.Replace(outhtml, "\\s+", " ");
outhtml = Regex.Replace(outhtml, ">\\s+<", "><");
outhtml = outhtml.Trim();
writer.Write(outhtml);
}
protected override void Render(HtmlTextWriter writer)
{
//最终输出前先存为html文件,如果发布最新信息了,可以打开一次default.aspx,然后他又会生成一次html
//这是默认的Render实现,直接输出到writer中
//base.Render(writer);
StringWriter html = new StringWriter();
HtmlTextWriter tw = new HtmlTextWriter(html);
//通过base.Render()方法,把生成的HTML写入到我们定义的tw中
base.Render(tw);
string path = Server.MapPath("index.html");
StreamWriter sw = new StreamWriter(path, false, System.Text.Encoding.Default);
//写入到文件中
sw.Write(html.ToString());
sw.Close();
//写入到writer中,以输出页面的HTML
//注意,这里不能再调用base.Render(writer),会出现错误
writer.Write(html.ToString());
}
csv.reader / writer - 为什么迭代 CSV 对象会导致 writer 没有输出?
如何解决csv.reader / writer - 为什么迭代 CSV 对象会导致 writer 没有输出??
我找到了 this example of a simple CSV read / write。
此代码读取和写入 CSV 文件,按第 7 列排序。
import csv
with open(''input.csv'',newline='''') as csvfile:
rdr = csv.reader(csvfile)
l = sorted(rdr,key=lambda x: x[6],reverse=True)
with open(''output.csv'',''w'') as csvout:
wrtr = csv.writer(csvout)
wrtr.writerows(l)
上面的代码将一个 CSV 文件输出到 output.csv 中
如果我需要进行排序以外的其他处理,我可能会通过遍历 CSV 对象的行来完成。展示问题的最简单示例就是迭代行并打印它们:
import csv
with open(''input.csv'',newline='''') as csvfile:
rdr = csv.reader(csvfile)
for arow in rdr:
print(arow)
l = sorted(rdr,''w'') as csvout:
wrtr = csv.writer(csvout)
wrtr.writerows(l)
上面的代码按预期将 CSV 行打印到屏幕上。 但是,output.csv 文件然后是空的(0 字节)
为什么遍历行会导致 csv.writer 没有输出? CSV 对象中是否存在某种类型的持久状态需要重置?
解决方法
正如@Barmar 正确指出的:
rdr 是一个迭代器。一个迭代器只能循环一次。 如果要多次处理,请将其转换为列表。
工作代码:
import csv
with open(''input.csv'',newline='''') as csvfile:
rdr = csv.reader(csvfile)
mylist = list(rdr)
for arow in mylist:
print(arow)
l = sorted(mylist,key=lambda x: x[6],reverse=True)
with open(''output.csv'',''w'') as csvout:
wrtr = csv.writer(csvout)
wrtr.writerows(l)
csv.writer写单词的每个字符
这是因为writerows
需要可迭代的行。这些行中的每一行都有一个可迭代的列。但是这里export_data
是单个可迭代的。此外,您无需使用zip_longest
,可以使用:
def export(request):
response = HttpResponse(content_type='text/csv')
writer = csv.writer(response)
writer.writerow(['Location']) #header
writer.writerows(Location.objects.values_list('L_name'))
response['Content_Disposition'] = 'attachment';
return response
或者如果L_name
是ArrayField
等,则可以使用以下方法将其展开:
def export(request):
response = HttpResponse(content_type='text/csv')
writer = csv.writer(response)
writer.writerow(['Location']) #header
writer.writerows((x,) for xs in Location.objects.values_list('L_name')for x in xs)
response['Content_Disposition'] = 'attachment';
return response
,
我最终这样做了:
def export(request):
response = HttpResponse(content_type='text/csv')
writer = csv.writer(response)
writer.writerow(['Base']) #header
for launch in Location.objects.all().values_list('L_name'):
list_launch = list(launch)
full_str = ' '.join([str(elem) for elem in list_launch])
str_split = ([full_str.split(",")])
export_data = zip_longest(*str_split,fillvalue='')
writer.writerows(export_data)
response['Content_Disposition'] = 'attatchment';
return response`
将列表转换为字符串,在逗号处分割字符串,然后使用zip_longest(* str_split,fillvalue ='')行在每个行上垂直输出每个名称。
csv.writer在单独的列/单元格中写入单词的每个字符
目标:从所有行内的定位标记中提取文本models
并将其放入csv中。
我正在尝试以下代码:
with open(''Sprint_data.csv'', ''ab'') as csvfile: spamwriter = csv.writer(csvfile) models = soup.find_all(''li'' , {"class" : "phoneListing"}) for model in models: model_name = unicode(u'' ''.join(model.a.stripped_strings)).encode(''utf8'').strip() spamwriter.writerow(unicode(u'' ''.join(model.a.stripped_strings)).encode(''utf8'').strip())
它工作正常,但csv中的每个单元格仅包含一个字符。
像这样:
| S | A | M | S | U | N | G |
代替:
|SAMSUNG|
我当然想念什么。但是呢
答案1
小编典典writerow
接受一个序列。您只给它一个字符串,因此将其视为一个序列,字符串的作用类似于字符序列。
您还要在此行中还有什么?没有?如果是这样,请使其成为一项的列表:
spamwriter.writerow([u'' ''.join(model.a.stripped_strings).encode(''utf8'').strip()])
(顺便说一句,unicode()
由于您已经加入了Unicode分隔符,因此完全不需要调用。)
关于为什么csvwriter.writerow和在每个字符后加逗号?的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于asp.net实例代码protected override void Render(HtmlTextWriter writer)、csv.reader / writer - 为什么迭代 CSV 对象会导致 writer 没有输出?、csv.writer写单词的每个字符、csv.writer在单独的列/单元格中写入单词的每个字符的相关知识,请在本站寻找。
本文标签: