#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