【问题标题】:Python .csv writerPython .csv 编写器
【发布时间】:2011-04-18 11:08:32
【问题描述】:

我在循环中使用 .writer() 方法,如 Python 文档中所示。 我想写变量u的结果,一行一行(或者更好一行一行)。

实际上它在解释器中完美运行,但模块 writerow() 似乎不起作用。为什么?

from urlparse import urlparse
import csv
import re

ifile =open(ipath,'r')
ofile = open(opath, 'wb')
writer = csv.writer(ofile, dialect='excel')

url =[urlparse(u).netloc for u in file (ipath, "r+b")]
sitesource =  set([re.sub("www.", "", e) for e in url])
liste = [re.split(",'", e) for e in liste]


ofile
for row in file (ifile) :
    for u in sitesource:
        print ("Creation de:", u)
        writer.writerow(u) 

ofile.close()

我使用的是 Python 2.7。

【问题讨论】:

  • python 解释器是否抛出错误或者是什么问题?顺便说一句,您正在打印变量“u”的值,但您正在将字母“u”写入 csv。这就是你想要的吗?
  • 解释器中没有错误。我想打印变量 u 的值。顺便说一句,文件似乎没有打开。
  • 您看到的结果是什么?文件是空的吗?将文件打开尝试,除了块,看看当你试图打开文件时是否有任何 IOError 被抛出 (ifile,ofile) 。如果没有 IOError ,请检查 sitesource 是否为空?打印它的内容,看看它是否有任何值。
  • 可能你没有写终止字符?这就是我创建 writer 对象的方式 Writer = csv.writer(open(sys.argv[2], 'wb'), delimiter=',',quotechar='"', quoting=csv.QUOTE_MINIMAL)
  • for row in file (ifile) : 不正确。 ifile 已经打开,所以应该是for row in ifile:

标签: python csv writer


【解决方案1】:

猜你的意思是,我会重写你的代码如下:

from urlparse import urlparse
import csv
import re

ifile =open(ipath,'r')
ofile = open(opath, 'wb')
writer = csv.writer(ofile, dialect='excel')

url =[urlparse(u).netloc for u in ifile]
sitesource =  set([re.sub("www.", "", e) for e in url])

for u in sitesource:
    print ("Creation de:", u)
    writer.writerow([u]) 

ofile.close()
ifile.close()

我删除了liste,因为它没有被使用。我删除了for row in file (ifile):,因为您在创建url 时已经迭代了它的内容。

我变了

url =[urlparse(u).netloc for u in file (ipath, "r+b")]

url =[urlparse(u).netloc for u in ifile]

因为您已经打开了文件。如果您正在阅读字符串,我假设您不想要二进制模式。

我更改了writerow(u) 来写一个序列:writerow([u])。这会在每行中放置一个 u,这意味着您的 csv 文件中实际上不会包含任何逗号。如果您希望将所有结果放在一行中,请将最后一个循环替换为以下语句 writer.writerow(sitesource)

【讨论】:

  • 谢谢,我刚刚创建了一个新的 .csv,进行了与您相同的更改,并且可以正常工作。因为 > url =[urlparse(u).netloc for u in ifile] 因为你已经打开了文件。非常感谢
【解决方案2】:

writerow() 需要一个序列参数,所以我认为你需要使用writer.writerow([u]),因为每个u 都是一个字符串——否则你将按照你目前拥有的方式传递一个字符序列.

【讨论】:

  • 好的我已经做了一个改变,并给它一个序列参数退出分裂函数。它返回列表集 set(['', 'alain-bazot.fr', 'blog.lefigaro.fr', 'humeursdejeandornac.blogspot.com', 'lefigaro.fr', 'machronique. com', 'lemoci.com', 'france-amerique.com', 'agriculture.gouv.fr']) 但仍然无法将其写入 csv 文件
【解决方案3】:

你想写字符串“u”吗?还是变量的内容?如果是后者,则去掉括号。

【讨论】:

  • 我想通过在解释器中打印变量 u 的内容来编写它,它给了我变量 u 的值。但是当我用一个简单的字符串(如 writer.writerow(“blabla”))在空白中尝试它时。不工作。似乎是模块 csv 不起作用......但我把 import csv 放在了开头。
【解决方案4】:

不完全确定,但 csv.writer.writerow 想要一个序列(我总是将它与列表一起使用),其中包含整行的字段,并且您正在迭代一组返回 u 中的内容的内容?

【讨论】:

  • 解释器中没有类型错误。我使用打印功能来检查它是否相关。但也许你是对的一点:writerow 可能想要 "," 来返回整行。但是函数 write 根本不起作用...
  • 那么变量“u”的值是多少?
猜你喜欢
  • 1970-01-01
  • 2018-02-20
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
相关资源
最近更新 更多