python中读取txt文件时split()函数的妙用

简介: python中读取txt文件时split()函数的妙用

不知道大家有没有过需要从txt文件中读取含有多行多列的数据的经历,当我们读入数据时,数据会以string的形式被读入,然而如何进行数据类型转换就成了大的问题。

这里介绍一种最简单的方式和容易产生的错误使用方法。
txt测试文件中的数据如下

image.png
我们使用如下代码读取文件,使用readlines()一次性将所有数据全部读取。


with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
    all_data = f.readlines()
    print(all_data)
# ['6.317438621610765E-05  6.123920173773844E-05  0.00010382572761752979\n', '0.00010819194873178063  8.848784016828921E-05  0.0002043378699454479\n', '9.79660835582763E-05  9.750829986943346E-05  0.00021506758227284687']

我们不难发现这时我们的所有数据都被读入了同一行,但是内部有三个单引号括起来的部分,与我们测试数据中的三行吻合。

我们也可以看到,我们需要将这些数据分成单独的string,然后我们就可以使用例如float关键字对这些数据进行类型转换。

我们看到数据之间是通过空格来分开的。我们第一时间想到我们应该使用.split(" ")方法以空格将数据分开。

我们尝试以下代码

with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
    all_data = f.readlines()
    all_data = all_data[0].split(" ")
    print(all_data)
# ['6.317438621610765E-05', '', '6.123920173773844E-05', '', '0.00010382572761752979\n']

首先我们需要选取第一行,使用all_data[0],然后再使用split(" ")函数分开它们。

我们成功达到了目的,但是我们同时引入了""空字符串项和末尾处\n的隐患,很是棘手。

这么做我们就进入了误区。

正确地做法如下

with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
    all_data = f.readlines()
    all_data = all_data[0].split()
    print(all_data)
# ['6.317438621610765E-05', '6.123920173773844E-05', '0.00010382572761752979']

我们使用split()函数时不添加任何参数,这样就一次性去掉了""空字符串项和末尾处\n的隐患还同时分开了各个字符串。

如果需要输出多行的结果,我们可以预先定义一个数组,用来存放我们的数据,完整代码如下:(以后所有的多行多列数据均可以如此读入)
方法一:将数据以二维列表形式读入

array2d = []
with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
    all_data = f.readlines()
    for i in range(len(all_data)):
        temp_list = []
        for element in all_data[i].split():
            temp_list.append(float(element))
        array2d.append(temp_list)

print(array2d)
#[[6.31743862e-05, 6.12392017e-05, 0.000103825728], 
# [0.000108191949, 8.84878402e-05, 0.00020433787], 
# [9.79660836e-05, 9.75082999e-05, 0.000215067582]]

方法二:将数据以二维数组形式读入

import numpy as np

array = np.zeros((3, 3))
with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
    all_data = f.readlines()
    for i, line in enumerate(all_data):
        numbers = line.split()
        for j, element in enumerate(numbers):
            array[i, j] = float(element)

print(array)
# [[6.31743862e-05 6.12392017e-05 1.03825728e-04]
#  [1.08191949e-04 8.84878402e-05 2.04337870e-04]
#  [9.79660836e-05 9.75082999e-05 2.15067582e-04]]
相关文章
|
2月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
146 67
|
4天前
|
存储 算法 Serverless
剖析文件共享工具背后的Python哈希表算法奥秘
在数字化时代,文件共享工具不可或缺。哈希表算法通过将文件名或哈希值映射到存储位置,实现快速检索与高效管理。Python中的哈希表可用于创建简易文件索引,支持快速插入和查找文件路径。哈希表不仅提升了文件定位速度,还优化了存储管理和多节点数据一致性,确保文件共享工具高效运行,满足多用户并发需求,推动文件共享领域向更高效、便捷的方向发展。
|
5天前
|
Python
[oeasy]python057_如何删除print函数_dunder_builtins_系统内建模块
本文介绍了如何删除Python中的`print`函数,并探讨了系统内建模块`__builtins__`的作用。主要内容包括: 1. **回忆上次内容**:上次提到使用下划线避免命名冲突。 2. **双下划线变量**:解释了双下划线(如`__name__`、`__doc__`、`__builtins__`)是系统定义的标识符,具有特殊含义。
19 3
|
8天前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
22 2
|
26天前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
44 7
|
1月前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
50 18
|
27天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
56 8
|
1月前
|
Python
Python中的函数
Python中的函数
45 8
|
5月前
|
SQL JSON 关系型数据库
n种方式教你用python读写excel等数据文件
n种方式教你用python读写excel等数据文件
81 1
|
7月前
|
存储 Python 内存技术
python WAV音频文件处理—— (1)读写WAV文件
python WAV音频文件处理—— (1)读写WAV文件
180 14