2015-06-02 3 views
0
import glob 
import csv 

def read_with_csv(filename): 
    data = [] 
    for x in csv.reader(open(filename, 'r')): 
     data.append(x)    
    return data 

def calculate_sum(data_sample): 
    total = 0 
    for row in data_sample[1:]: 
     price = float(row[9]) 
     total += price 
    return total 

files = [file for file in glob.glob("*.csv") if 'Invoice-Item-Adjustment_' in file] 
data_from_csv = read_with_csv(files) 
the_sum = data_from_csv(calculate_sum) 
print(the_sum) 

У меня есть несколько файлов в каталоге и читать список и прокручивать сумму в столбце и умножать ежемесячную общую сумму. У меня эррос и не знаю, как с этим бороться.Прочтите csv-файлы и вычислите общую сумму

Traceback (most recent call last): 
     File "listing.py", line 18, in <module> 
     data_from_csv = read_with_csv(files) 
     File "listing.py", line 6, in read_with_csv 
     for x in csv.reader(open(filename, 'r')): 
    TypeError: invalid file: ['JEExport_20141201-20141218_Invoice-Item-Adjustment_20 
    150208164027.csv', 'JEExport_20150116-20150128_Invoice-Item-Adjustment_201502021 
    70516.csv' 

] 

ответ

0

Перечисление списков в python возвратит коллекцию, а не сам файл.

Следовательно

files = [file for file in glob.glob("*.csv") if 'Invoice-Item-Adjustment_' in file] 

возвращает список файлов, имена которых содержат Счет-Item-Adjustment. Вам придется перебирать файлы по одному, а затем обрабатывать их.

+0

получил его работу. в настоящее время я 2 файла там, но его дал мне один общий файл. Я хочу объединить в один файл с одной общей суммой. \ C:> питон listing.py 32925,46 37701,64 –

+0

файлов = [для файла в glob.glob ("* CSV"), если 'Счет-Item-Adjustment_' в файле] для AFile в файлах: data_from_csv = read_with_csv (afile) the_sum = calculate_sum (data_from_csv) print (the_sum) –

+0

@RicardLe Я понимаю, что вы хотите объединить итоги всех файлов в одну общую сумму. Я прав? Если да, то поддерживайте переменную say all_total переменную, инициализированную до 0, которая сохранит текущую итоговую сумму для всех обработанных файлов CSV (all_total + = calculate_sum (data_from_csv)). Когда все ваши файлы являются процессами all_total будет содержать общую сумму –

0

Ваша функция read_with_csv() принимает имя файла в качестве аргумента NOT списка файлов. Таким образом, в зависимости от того, что вы хотите сделать, может работать следующее:

data_from_csv = [read_with_csv(file) for file in files] 
Смежные вопросы