Как создать пары из текстового файла, состоящего из числа и слова, предшествующего этому числу? - PullRequest
0 голосов
/ 04 февраля 2019

Я работаю над новым проектом, и команда, в которую я был назначен, - это весь Python.Я не настолько опытен в Python, поэтому я решил обратиться за помощью к stackoverflow.Моя часть проекта заключается в написании программы, которая читает текстовый файл и создает пары из всего, что он находит в файле, который является числом, и словом, которое предшествует этому числу.Единственное, что я сделал, это заставил программу прочитать текстовый файл и распечатать его целиком.Но я не знаю, как заставить его выплевывать пары, являющиеся числом и предшествующим ему словом.Любая помощь приветствуется!Спасибо.

Пример содержимого текстового файла:

I have 3 apples.
The apples were very good.
I ate 7 bananas.
The bananas were just as good.

Желаемый вывод:

have, 3
ate, 7

Мой код пока:

in_file = open("FILE.txt", "rt")  
contents = in_file.read()       
in_file.close()                  
print(contents)

(ЛОГИКА, КОТОРАЯ ОТПРАВЛЯЕТСЯ НАЗАД ПАРЫ, КОТОРЫЙ НОМЕР И СЛОВО, КОТОРОЕ ЭТО ПРЕДУСМОТРИТ

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Попробуйте что-то вроде этого:

result = []
def is_num(text):
    try:
        float(text)
        return True
    except:
        return False
with open('myfile', 'rw') as nf:
    lines = nf.readlines()
    for line in lines:
        line_list = line.split()
        for idx, item in enumerate(line_list):
            if is_num(item):
                result.append([item, line_list[idx-1])
0 голосов
/ 04 февраля 2019

Так что я беру файл, прочитавший все строки как одну строку.замените "\ n" пробелом, тогда я могу разбить его на каждое слово, разбив на каждый пробел.затем, перебирая разделенные слова в любое время, я получаю положительное целое число и его предшествующее слово.(Я работаю с целыми числами в начале строк, но не в начале файлов)

with open("FILE.txt","r") as f:    
    s = f.read()
    s = s.replace("\n"," ")
    s = s.split(" ")
    for k in range(s.length()):
        if(s[k].isdigit()):
            print(s[k-1],s[k])

ПРИМЕЧАНИЕ: isdigit работает только при положительном числе, а десятичное число отсутствует, используйте try, за исключением обработки десятичных знаков

0 голосов
/ 04 февраля 2019

Вы должны использовать регулярное выражение:

import re

with open('FILE.txt', 'r') as in_file:
    contents = in_file.read()

pairs = re.findall(r'(\w+)\s+(\d+)', contents)
print(pairs)

Выход:

[('have', '3'), ('ate', '7')]

Демонстрация для шаблона: https://regex101.com/r/bZzlJs/1

Если вы хотите вместо intиз строки для числа, вы можете сделать

pairs = [(word, int(num)) for word, num in re.findall(r'(\w+)\s+(\d+)', contents)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...