читать несколько CSV-файлов в python - PullRequest
0 голосов
/ 06 апреля 2020

Я новичок в Python У меня есть 10 CSV-файлов

f1.csv
55.4
67.4
23.56
12.5

f2.csv
9.5
26.1
6.2

.... 
f10.csv
3.2
9.45
3.91
3.8

Я хочу прочитать эти 10 файлов и затем суммировать значение в каждом файле, вывод

sumf1=158.86
sumf2= 41.8
...
sumf10=20.36

это мой код для чтения и суммирования данных одного файла, но я не знаю, как можно прочитать 10 файлов и затем суммировать значения каждого из них, какая помощь, пожалуйста?

  total = 0

with open('C:\\Users\\hp\\Desktop\\pys\\file1.csv', 'r') as inp:
    for line in inp:
        try:
            num = float(line)
            total += num
        except ValueError:
            print('{} is not a number!'.format(line))
    print('Total of all numbers: {}'.format(total))

Ответы [ 3 ]

0 голосов
/ 06 апреля 2020

У вас должен быть список файлов. Вашему коду нужен только внешний код для l oop:

files = ['file1.csv', 'file2.csv', 'file3.csv', 'file4.csv'] # and so on

total = 0

for file in files:

    with open('C:\\Users\\hp\\Desktop\\pys\\{}'.format(file), 'r') as inp:
        for line in inp:
            try:
                num = float(line)
                total += num
            except ValueError:
                print('{} is not a number!'.format(line))

print('Total of all numbers: {}'.format(total))

Если вы хотите получить все файлы в одном каталоге, вы можете сделать это:

from os import listdir

files = listdir('path_to_your_directory')

# Remove all the files that does not end with .csv
files = [file in files if file.endswith('.csv')]
0 голосов
/ 06 апреля 2020

Как вы просили, не больше и не меньше:

from glob import iglob

file_spec = '/some_path/*.csv' # to read all csv files
# file_spec = '/some_path/f*.csv' # to read all csv files for file names beginning with 'f'
# file_spec = '/some_path/*' # to read all files

for file in iglob(file_spec):
    sum = 0.0
    n = 0 # number of terms going into the sum
    with open(file) as f:
        for line in f:
            try:
                sum += float(line)
            except ValueError:
                print('Bad value: ', line, end='')
            else:
                n += 1
    mean = (sum / n) if n != 0 else "undefined"
    print(f'sum, mean for {file} => {sum}, {mean}')
0 голосов
/ 06 апреля 2020

Вы можете сделать это так

def sumFile(filename):
    total = 0

    with open(filename, 'r') as inp:
        for line in inp:
            try:
                num = float(line)
                total += num
            except ValueError:
                print('{} is not a number!'.format(line))
        print('Total of all numbers: {}'.format(total))

    return total

total = sum(sumFile(filename) for filename in ["file1", "file2", "file3", "fileN"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...