Как извлечь данные sum из текстового файла на Python

#python #text-files #data-analysis

#python #текстовые файлы #анализ данных

Вопрос:

У меня есть текстовый файл txt, который содержит 6 столбцов: 1. пол (М / Ж) 2.возраст 3. рост 4. вес 5.-/ 6.zip код

Мне нужно найти из этого текста, сколько мужчин имеют знак. (например: из текстового текста 30 M (мужчины) — )

Поэтому мне нужно только число в конце.

Логически мне нужно работать со столбцами 1 и 5, но я изо всех сил пытаюсь получить только одно (суммарное) число в конце.

Это содержимое текста:

 M 87  66 133 - 33634
M 17  77 119 - 33625
M 63  57 230 - 33603
F 55  50 249 - 33646
M 45  51 204 - 33675
M 58  49 145 - 33629
F 84  70 215 - 33606
M 50  69 184 - 33647
M 83  60 178 - 33611
M 42  66 262 - 33682
M 33  75 176   33634
M 27  48 132 - 33607
  

Сейчас я получаю результат …, но я хочу, чтобы и M, и положительный. Как я могу добавить это к вхождениям??

 f=open('corona.txt','r')
data=f.read()
occurrences=data.count('M')
print('Number of Males that have been tested positive:',occurrences)
  

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

1. Что вы пробовали? Покажите свой существующий код и то, что работает не так, как ожидалось

2. поделитесь кодом и несколькими строками текстового файла

3. Я попробовал это с помощью csv и enumerate, но мне нужно сделать это с помощью простого синтаксиса.

4. пожалуйста, поделитесь своим кодом, чтобы увидеть, что вы пробовали…

5. пожалуйста, скопируйте ваш код и вставьте его сюда, нам легче помочь вам

Ответ №1:

Вы можете разделить строки следующим образом:

 occurrences = 0
with open('corona.txt') as f:
    for line in f:
        cells = line.split()
        if cells[0] == "M" and cells[4] == "-":
            occurrences  = 1
print("Occurrences of M-:", occurrences)
  

Но лучше использовать csv модуль или pandas для такого рода работ.

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

1. Да, это то, что я искал. Большое спасибо! Ценю это 🙂

Ответ №2:

Если вы выполняете какой-либо значительный объем работы с текстовыми и столбчатыми данными, я бы посоветовал начать обучение pandas

Для этой задачи, если ваш csv содержит одну запись в строке и разделен пробелом:

 import pandas as pd
d = pd.read_csv('data.txt', 
        names=['Sex', 'Age', 'Height', 'Weight', 'Sign', 'ZIP'], 
        sep=' ', index_col=False)

d[(d.Sex=='M') amp; (d.Sign=='-')].shape[0] # or
len(d[(d.Sex=='M') amp; (d.Sign=='-')]) # same result, in this case = 9
  

Pandas это очень обширный пакет. Что делает этот код, так это создает a DataFrame из ваших данных csv, присваивая каждому столбцу имя. Затем выбирает из этого каждую строку, в которой находятся оба ваших условия Sex == 'M' и Sign == '-' , и сообщает о количестве найденных таким образом записей.

Я рекомендую начать здесь

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

1. Большое вам спасибо! Но я не должен использовать другие библиотеки, я должен получить результат, используя простые базовые синтаксические: например, open() read и, возможно, используя цикл.

2. Извините, я неправильно понял «простой синтаксис» как «Consise Syntax», а не «без использования дополнительных пакетов». Можете ли вы обновить свой OP с помощью кода, который вы уже пробовали, используя открытые встроенные модули, и результатов, которые вы получили?

3. Есть ли какой-либо возможный способ получить тот же результат, но определить его таким образом: file=open(‘mf.txt ‘,’r’) для строки в файле: print(строка) file.close()