如何在文件处理中从文本文件中找到每一行的最小值和最大值?
Posted
技术标签:
【中文标题】如何在文件处理中从文本文件中找到每一行的最小值和最大值?【英文标题】:How to find the minimum and maximum value of the each row from the text file in file handling? 【发布时间】:2021-12-28 20:38:04 【问题描述】:我在文件夹中有一个文本文件,该文件包含许多数字的数据。我需要使用 Python 从该文件的每一行中找到最小值和最大值。结果应该是这样的:
.txt 文件中的示例数字
10 2 3 5 9 12 15
5 9 4 8 10 98 15
23 19 89 71 56 20 11
这样的结果
[(min,max)from first row, (min,max)from second row,.........]
预期结果
[(2,15),(4,98),(11,89),.....]
【问题讨论】:
没有图片 - 只有文字。 到目前为止你尝试了什么?你有什么问题吗? 【参考方案1】:我能想到的最简单的方法是使用 pandas。将文件读入数据框并zip
将最小值和最大值放在一起。
from io import StringIO # import just for the example
import pandas as pd
s = """10 2 3 5 9 12 15
5 9 4 8 10 98 15
23 19 89 71 56 20 11"""
# df = pd.read_csv('/path/to/file.txt', sep='\s+', header=None)
df = pd.read_csv(StringIO(s), sep='\s+', header=None)
list(zip(df.min(axis=1), df.max(axis=1))) # -> [(2, 15), (4, 98), (11, 89)]
【讨论】:
谢谢@It_is_Chris.. 实际上我想使用文件处理找到结果。 香草python可以很轻松地完成这项工作,为什么还要有一个外部库? @balderman 因为使用 pandas 比使用循环要快得多,尤其是在处理数百万行时。【参考方案2】:遍历行,拆分。转换为 int 并使用 min / max
with open ('in.txt') as f:
data = []
for line in f:
numbers = [int(x) for x in line.strip().split()]
data.append((min(numbers),max(numbers)))
print(data)
输出
[(2, 15), (4, 98), (11, 89)]
【讨论】:
【参考方案3】:有很多方法可以做到这一点,但我首先想到的是使用 pandas 及其 read_fwf 函数(固定宽度的列)。查看您的示例 .txt 文件,数字由 2-3 个空格分隔,因此您不能使用一个特定的分隔符(除非它是 \t - 然后使用 pd.read_csv())。之后,您可以:
with open("textfile.txt", 'r') as file:
df = pd.read_fwf(file, colspecs=[widths_of_your_colums])
然后你可以使用你描述的算法。
list = [(min(row), max(row)) for row in df]
【讨论】:
【参考方案4】:一种选择是读取每一行,按空格分割,从字符串转换为整数,然后添加到列表中。然后使用min
和max
查找相关号码:
with open('file.txt') as fil:
results = []
for line in fil:
nums = [int(x) for x in line.strip().split()]
results.append((min(nums), max(nums)))
print(results)
# [(2, 15), (4, 98), (11, 89)]
【讨论】:
【参考方案5】:with open("file.txt", "r") as f:
num_list = [list(map(lambda x: int(x), line.strip().split())) for line in f]
out = [(min(li), max(li)) for li in num_list]
【讨论】:
以上是关于如何在文件处理中从文本文件中找到每一行的最小值和最大值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Windows 批处理文件遍历文本文件中的每一行?