在python中运行循环文件

时间:2018-05-25 15:38:05

标签: python csv

我的桌面上有一个名为' companyfollowerstweets'其中包含91个文件夹,每个文件夹名为' followerstweets(公司名称)',它们都包含200个csv文件,每个文件包含Twitter上该公司关注者的最新推文。我在前200行中进行情绪分析,其中包含每家公司200名粉丝中的每一位的推文,其中结果被添加到一个列表中,最终给出了每个公司一个结果;所有40,000条推文的负推文和正推文的百分比(每200个粉丝200条推文)。希望这是有道理的。现在我只设法在每个文件夹的200个csv文件上运行一个循环,每次我手动输入公司的名称。但是,我希望在我不必输入公司名称的情况下运行这91个文件夹中的每一个。这是我的代码:

import nltk
import csv
import sklearn
import nltk, string, numpy
from sklearn.feature_extraction.text import TfidfVectorizer
from collections import defaultdict
from sklearn.feature_extraction.text import CountVectorizer
columns = defaultdict(list)
from nltk.corpus import stopwords
from sklearn.feature_extraction.text import TfidfTransformer
import math
import sentiment_mod as s
import glob
import itertools

lijst = glob.glob('companyfollowerstweets/followerstweetsCisco/*.csv')
tweets1 = []
sent1 = []
print(lijst[0])
for item in lijst:
    stopwords_set = set(stopwords.words("english"))
    with open(item, encoding = 'latin-1') as d:
        reader1=csv.reader(d)
        next(reader1)
        for row in itertools.islice(reader1,200):
            tweets1.extend([row[2]])
        words_cleaned = [" ".join([words for words in sentence.split() if 'http' not in words and not words.startswith('@')]) for sentence in tweets1]
        words_filtered = [e.lower() for e in words_cleaned]
        words_without_stopwords = [word for word in words_filtered if not word in stopwords_set]
    tweets1 = words_without_stopwords
    tweets1 = list(filter(None, tweets1))


for d in tweets1:
    new1 = s.sentiment(d)
    sent1.extend(new1)
    total1 = len(sent1)/2
    neg_percentage1 = (sent1.count("neg")/total1)*100
    pos_percentage1 = (sent1.count("pos")/total1)*100

res = sum(sent1[1::2])/total1
low = min(sent1[1::2])
high = max(sent1[1::2])

print("% of negative Tweets:", neg_percentage1)
print("% of positive Tweets:", pos_percentage1)
print("Total number of Tweets:", total1)
print("Average confidence:", res)
print("min confidence:", low)
print("max confidence:", high)

这个具体的例子适用于公司'思科'如你看到的。如何为这个文件夹中的每个文件夹保留此代码?

3 个答案:

答案 0 :(得分:0)

您当前目录(os.walk())上的

os.getcwd()就是您想要的。这将以递归方式迭代当前工作目录中的所有内容。

答案 1 :(得分:0)

你可以像这样使用嵌套的glob:

from glob import glob
[glob(i+'/*.csv') for i in glob('companyfollowerstweets/followerstweets*')]

这将返回一个列表列表(每个公司的推文列表)。

请注意,这不会有任何特定的顺序。

答案 2 :(得分:0)

你可以做两个循环或使用os.walk,后者更干净:

import os
company_results={}
for root, dirs, files in os.walk('companyfollowerstweets'):
    if len(dirs)==0:
        results=do_analysis(files)
        company_results[root]=results

我建议将所有分析放在一个功能更清晰的代码中。然后你可以用上面的代码得到所有结果的字典。