使用循环从文件中读取和提取有用数据无法生成值列表

Posted

技术标签:

【中文标题】使用循环从文件中读取和提取有用数据无法生成值列表【英文标题】:Reading and extracting useful data from a file with a loop fails to produce a list of values 【发布时间】:2021-06-20 12:11:44 【问题描述】:

我正在读取包含一些数据的文件。我希望将数据分成几类并将它们写入它们自己的文件中(例如整数,如电话号码;小数;单个单词;和单独的句子)。

def data_reading():
    data = []
    integers = []
    with open("my_lines.txt") as file:
        for row in file:
            row = row.strip().replace("\n", "")
            data.extend(row.split(","))
        for values in data:
            if values.isnumeric():
                print(values + " - integer")
                integers.extend(row.split(","))
            elif values.isalpha():
                print(values + " - alphabetical strings")
            elif values.isalnum():
                print(values + " - alphanumeric")
            else:
                print(values + " - float")          
    return integers

somethin = data_reading()
print(somethin)

如果我要输入 123、abc、未知地址、20.12.85 之类的行,我的目标是获取 4 个列表来存储值,并使用这些列表通过单独的写入函数写入 4 个文件。但是,现在我只存储最后一个浮点值的次数与我正在读取的数据文件中的行数一样多(我试图用 isnumerical() 获取数字)。怎么会?我好像漏掉了什么。

【问题讨论】:

【参考方案1】:

您有两个单独的 for 循环,当您将整数放入列表时,您已经遍历了文件中的所有行,因此 row 指向最后一行,即“20.12.85”。

请改用integers.append(values)(或integers.append(int(values)),如果您想存储实际整数)。

像这样:

def data_reading():
    data = []
    integers = []
    with open("my_lines.txt") as file:
        for row in file:
            row = row.strip().replace("\n", "")
            data.extend(row.split(","))
        for value in data:
            if value.isnumeric():
                print(value + " - integer")
                integers.append(value)
            elif value.isalpha():
                print(value + " - alphabetical strings")
            elif value.isalnum():
                print(value + " - alphanumeric")
            else:
                print(value + " - float")
    return integers

somethin = data_reading()
print(somethin)

【讨论】:

做到了!非常感谢。

以上是关于使用循环从文件中读取和提取有用数据无法生成值列表的主要内容,如果未能解决你的问题,请参考以下文章

Python:无法通过`for`循环传递从文件中读取的字符串值

更新从读取字典的 for 循环生成的 QLineEdit 文本框中的文本

如何使用for循环从列表中提取数据

ddsplitcsplit命令

如何从r中的.ini文件中提取数据?

从冒号分隔的 varchar 中提取值,然后循环将数据插入数据库