2016-05-30 2 views
1

Я новичок в Python и я использую следующий код, чтобы тянуть вывод, как анализ настроений:читает все текстовые файлы из каталога

import json 
from watson_developer_cloud import ToneAnalyzerV3Beta 
import urllib.request 
import codecs 
import csv 
import os 
import re 
import sys 
import collections 
import glob 
ipath = 'C:/TEMP/' # input folder 
opath = 'C:/TEMP/matrix/' # output folder 
reader = codecs.getreader("utf-8") 
tone_analyzer = ToneAnalyzerV3Beta(
    url='https://gateway.watsonplatform.net/tone-analyzer/api', 
    username='ABCID', 
    password='ABCPASS', 
    version='2016-02-11') 
path = 'C:/TEMP/*.txt' 
file = glob.glob(path) 
text = file.read() 
data=tone_analyzer.tone(text='text') 
for cat in data['document_tone']['tone_categories']: 
    print('Category:', cat['category_name']) 
    for tone in cat['tones']: 
     print('-', tone['tone_name'],tone['score']) 
     #create file 

В приведенном выше коде все, что я пытаюсь сделать, это прочитать файл и анализировать все текстовые файлы, хранящиеся в папке C:/TEMP, но я продолжаю получать и ошибочно: объект «list» не имеет атрибута «read»

Не знаю, где я ошибаюсь, и я был бы очень признателен за любую помощь с этим. Кроме того, есть ли способ, которым я могу записать вывод в CSV-файл, поэтому, если я читаю файл

ABC.txt и создаю выходной CSV-файл с именем ABC.csv с выходными значениями.

Спасибо

ответ

8

Glob возвращает список файлов, вам нужно пройти по списку, откройте каждый файл, а затем вызвать .read на файла объекта:

files = glob.glob(path) 
# iterate over the list getting each file 
for fle in files: 
    # open the file and then call .read() to get the text 
    with open(fle) as f: 
     text = f.read() 

Не уверен, что именно вы хотите написать, но csv lib сделает это:

from csv import writer 

files = glob.glob(path) 
# iterate over the list getting each file 
for fle in files: 
    # open the file and then call .read() to get the text 
    with open(fle) as f, open("{}.csv".format(fle.rsplit(".", 1)[1]),"w") as out: 
     text = f.read() 
     wr = writer(out) 
     data = tone_analyzer.tone(text='text') 
     wr.writerow(["some", "column" ,"names"]) # write the col names 

Затем вызовите writerow, передавая список того, что вы хотите написать для каждой строки.

+0

Спасибо, Padraic, что сделал трюк. Вы знаете, есть ли способ написать вывод в отдельных CSV-файлах. Поэтому, если имена текстовых файлов - abc.txt и xyz.txt, можно создать два файла abc.csv и xyz.csv, содержащие выходы. – Rvs

+0

@Rvs, да, что вы пишете на csv? –

+0

Спасибо Padraic, поэтому, если выход после выполнения логики на A.txt равен X, Y, Z. Я ищу создать CSV-файл A.CSV, содержащий этот вывод, и если вывод для файла B.txt должен быть сохранен в B.CSV. Я очень ценю вашу помощь здесь. – Rvs

Смежные вопросы