停止迭代:在python3中使用csv中的下一个函数创建额外的列

时间:2018-01-13 13:08:15

标签: python python-3.x csv

我正在尝试在我的csv文件中添加额外的列。为此,我使用了下一个函数,但它显示以下错误。

vechainofficial_tweets.csv
Traceback (most recent call last):
  File "abc.py", line 22, in <module>
    row=next(reader)

StopIteration异常

import csv
import os
import glob
from textblob import TextBlob

path=''
extension='csv'
os.chdir('./')
results=[i for i in glob.glob('*.{}'.format(extension))]

# print(result)

for result in results:
    print(result)
    with open(result,'r') as csvfile:
            with open(result,'w') as csv1:
                writer=csv.writer(csv1,lineterminator='\n')
                reader=csv.reader(csvfile)

                all=[]

                row=next(reader)
                row.append('Sentiment')
                all.append(row)

                for row in reader:
                    row.append(TextBlob(row[2]).sentiment)
                    all.append(row)
                writer.writerows(row)

                print("success")

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

StopIteration错误表示您呼叫generator的{​​{1}}为空。因此,在您的情况下,next()生成器为空,因此在您调用reader时会抛出错误。

因此,要解决此问题,您需要确保文件next(reader)在打开时实际上是result

您可以通过发出嵌套的CSV语句并将其替换为with来简单地执行此操作,这将使程序打印每个print(csvfile.read())文件的内容。

然后,只需分析输出就可以看出出了什么问题。

答案 1 :(得分:0)

首先,您正在尝试写入您正在阅读的文件。您的代码会打开x=np.linspace(0, 2*math.pi,100) import matplotlib.pyplot as plt %matplotlib inline plt.figure(figsize=(10,5)) plt.yticks(np.arange(-1,1.25,0.25)) plt.xticks(np.arange(0, 7, 1)) plt.plot(x,np.cos(x),'r',label="sine") plt.plot(x,np.sin(x),'b',label="cosine") plt.xlabel('x (in radians)') plt.legend(loc=3) 两次,一次针对读者,一次针对编写者。文本文件不会那样工作。您需要打开一个文件进行输入,打开另一个文件进行输出。

其次,result不会为您的文件添加列。它移动到输入文件的下一条记录。如果您使用next()的内置迭代,则需要一个很好的理由来使用csv