Python 如何从数字文本文件和该数字前面的单词创建配对?

Python 如何从数字文本文件和该数字前面的单词创建配对?,python,python-3.x,file,text,Python,Python 3.x,File,Text,我正在从事一个新项目,我被分配到的团队都是Python。我对Python不是那么精通,所以我想我应该求助于stackoverflow。我的部分工作是编写一个程序,读取一个文本文件,并从文件中找到的数字和该数字前面的单词中创建配对。我所做的唯一一件事就是让程序读取文本文件并打印整个内容。但我不知道如何让它吐回一对数字和它前面的单词。感谢您的帮助!多谢各位 文本文件内容示例: I have 3 apples. The apples were very good. I ate 7 bananas. T

我正在从事一个新项目,我被分配到的团队都是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)
(返回数字对及其前面的单词的逻辑)您应该使用正则表达式:

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')]
模式演示:

如果您想要一个
int
而不是数字的字符串,您可以这样做

pairs = [(word, int(num)) for word, num in re.findall(r'(\w+)\s+(\d+)', contents)]

试着这样做:

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])

因此,我将文件作为一个字符串读取所有行。用空格替换“\n” 然后我可以通过在每个空格处拆分,将其拆分为每个单词。然后通过迭代分割的单词,任何时候都是一个正整数,我打印它和它的前一个单词。(我处理行开头的整数,但不处理文件开头的整数)


注意:isdigit仅适用于数字为正数且不存在小数的情况。请尝试处理小数以外的数字。

欢迎使用SO!请举例说明您的文件格式,因为如果没有足够的详细信息,很难为您提供帮助。您是否有任何样本数据帮助社区正确解决您的问题?欢迎使用StackOverflow。您的编辑大大改进了您的问题:祝贺您。我把你的问题再编辑了一点。但你说的“回来”是什么意思?您想要一个输出文本文件,该文件现在看起来像您问题的一部分吗?您的意思是希望函数返回大小为2的元组列表吗?此外,“数字”是指表示整数的连续十进制数字字符串,还是要包括带小数点的数字或其他类型的数字?如果数字字符串是一行中的第一个,该怎么办?你想要上一行的最后一个字吗?
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])