Суммирование набора строковых чисел

#python #python-3.x

#python #python-3.x

Вопрос:

У меня есть файл, в котором содержится набор чисел (35463). Я хочу найти сумму всех чисел, но все числа определены как строки. Я знаю, что строки могут быть преобразованы в число с помощью float (), но поскольку в нем 35463 строки, потребуется очень много работы, чтобы преобразовать все строки в числа, каждую за каждой. Я написал это до сих пор:

 def main():
    with open ("file", "r") as myfile:
        data = myfile.read().splitlines()

main()
  

Комментарии:

1. Вы не можете добавлять строки, подобные numbers, вы должны преобразовать их или написать свою собственную функцию добавления строк

2. «будет так много работы, чтобы преобразовать все строки в числа» Уверяю вас, компьютер закончит это в мгновение ока.

3. ДА. Есть ли какой-либо способ преобразовать все строки в одной функции, а затем суммировать их все?

4. Представлены ли ваши файлы в формате DataFrame?

5. Я имел в виду, если бы я попытался преобразовать все строки в числа, написав отдельные коды, такие как a = float (файл[0]), b = float (файл[1])… это была бы тяжелая работа, потому что существует так много ниточек. И я хотел знать, есть ли какой-нибудь код, который мог бы выполнить всю работу

Ответ №1:

Если в вашем файле просто есть число в каждой строке, например

 0.7506097252963208
0.9176088653062778
0.6762574457637649
0.9782545470065891
...
  

Вы можете перебирать строки файла, проводя по объекту open file. Здесь я использую map для применения float к каждой строке файла

 with open('filename') as f:
    result = sum(map(float, f))
  

Я попробовал с 350000 записями, и это заняло около 145 миллисекунд (на не очень хорошем компьютере).

Комментарии:

1. О да, это то, что я пытался сказать. И это сработало, большое вам спасибо.

Ответ №2:

Допустим, вы создали файл чисел, подобный этому:

 echo "1234n2545353n123245n3254657687n8976857463n" >> numbers.txt
  

выглядит так:

 cat numbers.txt                                                                             
1234
2545353
123245
3254657687
8976857463
  

одно из возможных решений:

 # read the lines and trim them
lines = list(map(str.strip, open('numbers.txt').readlines()))
# ['1234', '2545353', '123245', '3254657687', '8976857463', '']

# remove line ending, empty lines
lines = list(filter(lambda item: len(item), nums))
# ['1234', '2545353', '123245', '3254657687', '8976857463']

# convert to numbers
nums = list(map(float, lines))
# [1234.0, 2545353.0, 123245.0, 3254657687.0, 8976857463.0]

# and now we simply sum 'em
total = sum(nums)
# 12234184982.0