GVKun编程网logo

为什么csvwriter.writerow()在每个字符后加逗号?(csv.writer()用法)

21

在本文中,我们将带你了解为什么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()用法)

为什么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)

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 没有输出?

如何解决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写单词的每个字符

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_nameArrayField等,则可以使用以下方法将其展开:

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在单独的列/单元格中写入单词的每个字符

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在单独的列/单元格中写入单词的每个字符的相关知识,请在本站寻找。

本文标签: