用Python将句子列表写入CSV单列

5 投票
2 回答
4825 浏览
提问于 2025-04-18 02:16

我开始的时候有一个CSV文件,这个文件里只有一列,很多行,每一行都是一句话。然后我写了一些Python代码来去掉那些常见的无意义词(比如“的”、“是”等),生成了一个新的CSV文件,格式和原来一样(还是一列很多行的句子,不过现在句子里的无意义词被去掉了)。但是我代码里唯一不工作的部分是写入新的CSV文件。

我本来是想把一句话写到一列里,结果却变成了多列,每一列的每一行只包含一句话的一个字符。

这是我新的文本列表的一个例子:

['"Although online site asset business, still essential need reliable dependable web hosting provider. When searching suitable web host website, one name recommend. Choose plan that\'s Best Business Today! Try Now FREE 30 Days! Track sales expenses \x82"', 
'"Although online site asset business, still essential need reliable dependable web hosting provider. When searching suitable web host website, one name recommend. Choose plan that\'s Best Business Today! Try Now FREE 30 Days! Track sales expenses \x82"']

这是输出的CSV文件的一个例子:

col1 col2
"      W
W      e
"      W
W      e
l
l

我哪里出错了呢?

这是我的代码:

def remove_stopwords(filename):
  new_text_list=[]
  cachedStopWords = set(stopwords.words("english"))
  with open(filename,"rU") as f:
    next(f)
    for line in f:
      row = line.split()
      text = ' '.join([word for word in row
                             if word not in cachedStopWords])
      # print text
      new_text_list.append(text)
  print new_text_list

  with open("output.csv",'wb') as g:
    writer=csv.writer(g)
    for val in new_text_list:
      writer.writerows([val])

2 个回答

1

我使用了官方的Python CSV文档,成功地写入和读取了你的示例数据,代码如下...

    l = ['"Although online site asset business, still essential need reliable dependable web hosting provider. When searching suitable web host website, one name recommend. Choose plan that\'s Best Business Today! Try Now FREE 30 Days! Track sales expenses \x82"',
 '"Although online site asset business, still essential need reliable dependable web hosting provider. When searching suitable web host website, one name recommend. Choose plan that\'s Best Business Today! Try Now FREE 30 Days! Track sales expenses \x82"']

with open('output.csv', 'wb') as csvfile:
    writer = csv.write(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL)
       for i in l:
           write.writerow(i)

然后我按照下面的方式读取了文件:

with open('output.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in reader:
        print ''.join(row)

得到了这样的输出:

"虽然在线网站资产业务,但仍然需要一个可靠的网络托管服务提供商。当寻找合适的网络托管网站时,有一个名字被推荐。选择最适合今天的商业计划!现在试用30天免费!跟踪销售费用 �"

"虽然在线网站资产业务,但仍然需要一个可靠的网络托管服务提供商。当寻找合适的网络托管网站时,有一个名字被推荐。选择最适合今天的商业计划!现在试用30天免费!跟踪销售费用 �"

希望这对你有帮助...

4
with open("output.csv", 'wb') as g:
    writer = csv.writer(g)
    for item in new_text_list:
        writer.writerow([item])  # writerow (singular), not writerows (plural)

或者

with open("output.csv", 'wb') as g:
    writer = csv.writer(g)
    writer.writerows([[item] for item in new_text_list])

当你使用 writerows 时,传入的参数应该是一个行的迭代器,每一行都是一个字段值的迭代器。在这里,字段值就是 item。所以一行可以是列表 [item]。因此,writerows 可以接受一个列表的列表作为参数。

writer.writerows([val])

之所以不行,是因为 [val] 只是一个包含字符串的列表,而不是一个列表的列表。

现在字符串也是一种序列——字符的序列:

In [164]: list('abc')
Out[164]: ['a', 'b', 'c']

所以 writerows[val] 当作一个包含 row 的列表,val。每个字符都代表一个字段值。于是你字符串中的字符就被分开了。例如,

import csv
with open('/tmp/out', 'wb') as f:
    writer = csv.writer(f)
    writer.writerows(['Hi, there'])

产生

H,i,",", ,t,h,e,r,e

撰写回答