使用 csv.reader(open(..)..) 时如何修复“AttributeError: __enter__”?

blu*_*rld 6 python csv with-statement

我的代码出现以下错误:

Traceback (most recent call last):
File "C:\Users\XXX\Sentiment Analysis-vader.py", line 34, in <module>
    f.printer()

File "C:\Users\XXX\Sentiment Analysis-vader.py", line 18, in printer
    with csv.reader(open('analyse_' + str(bloombergcode) + '.csv', 'r'), delimiter= ",",quotechar='|') as q2:

AttributeError: __enter__

Process finished with exit code 1
Run Code Online (Sandbox Code Playgroud)

我使用了以下代码:

import csv
from nltk.sentiment.vader import SentimentIntensityAnalyzer

class VaderSentiment:
    def __init__(self, bloomcode):
        self.bloomcode = bloomcode

    def print_sentiment_scores(self, sentence):
        self.sentence = sentence
        analyser = SentimentIntensityAnalyzer()
        snt = analyser.polarity_scores(self.sentence)
        print("{:-<40} {}".format(self.sentence, str(snt)))

    def printer(self):
        bloombergcode = self.bloomcode
        with csv.reader(open('analyse_' + str(bloombergcode) + '.csv', 'r'), delimiter= ",",quotechar='|') as q2:
            for line in q2:
                for field in line:
                    print_sentiment_scores(field)

for code in ('AAPL', 'NFLX'):
    f = VaderSentiment(code)
    f.printer()
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

我已经看到了一些其他类似的问题(Python Json with returns AttributeError: __enter__),但解决方案不适用于我的问题。

有人看到问题所在吗?

Gin*_*pin 9

你没有csv.reader正确使用。它不支持放置在with语句内。

尝试按照使用示例中的相同方式进行操作:

with open('analyse_' + str(bloombergcode) + '.csv', 'r') as csv_file:
    q2 = csv.reader(csv_file, delimiter=',', quotechar='|')
    for line in q2:
        # ..rest of your code..
Run Code Online (Sandbox Code Playgroud)

将其包裹open在里面with(因为open支持它并且实际上是推荐的使用方式)然后csv.reader在里面使用。