翼度科技»论坛 编程开发 python 查看内容

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

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
不知道大家有没有过需要从
  1. txt
复制代码
文件中读取含有多行多列的数据的经历,当我们读入数据时,数据会以
  1. string
复制代码
的形式被读入,然而如何进行数据类型转换就成了大的问题。
这里介绍一种最简单的方式和容易产生的错误使用方法。

txt测试文件中的数据如下


我们使用如下代码读取文件,使用
  1. readlines()
复制代码
一次性将所有数据全部读取。
  1. with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
  2.     all_data = f.readlines()
  3.     print(all_data)
  4. # ['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']
复制代码
我们不难发现这时我们的所有数据都被读入了同一行,但是内部有三个单引号括起来的部分,与我们测试数据中的三行吻合。
我们也可以看到,我们需要将这些数据分成单独的
  1. string
复制代码
,然后我们就可以使用例如
  1. float
复制代码
关键字对这些数据进行类型转换。
我们看到数据之间是通过空格来分开的。我们第一时间想到我们应该使用
  1. .split(" ")
复制代码
方法以空格将数据分开。

我们尝试以下代码
  1. with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
  2.     all_data = f.readlines()
  3.     all_data = all_data[0].split(" ")
  4.     print(all_data)
  5. # ['6.317438621610765E-05', '', '6.123920173773844E-05', '', '0.00010382572761752979\n']
复制代码
首先我们需要选取第一行,使用
  1. all_data[0]
复制代码
,然后再使用
  1. split(" ")
复制代码
函数分开它们。
我们成功达到了目的,但是我们同时引入了
  1. ""
复制代码
空字符串项和末尾处
  1. \n
复制代码
的隐患,很是棘手。
这么做我们就进入了误区。

正确地做法如下
  1. with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
  2.     all_data = f.readlines()
  3.     all_data = all_data[0].split()
  4.     print(all_data)
  5. # ['6.317438621610765E-05', '6.123920173773844E-05', '0.00010382572761752979']
复制代码
我们使用
  1. split()
复制代码
函数时不添加任何参数,这样就一次性去掉了
  1. ""
复制代码
空字符串项和末尾处
  1. \n
复制代码
的隐患还同时分开了各个字符串。
如果需要输出多行的结果,我们可以预先定义一个数组,用来存放我们的数据,完整代码如下:(以后所有的多行多列数据均可以如此读入)

方法一:将数据以二维列表形式读入
  1. array2d = []
  2. with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
  3.     all_data = f.readlines()
  4.     for i in range(len(all_data)):
  5.         temp_list = []
  6.         for element in all_data[i].split():
  7.             temp_list.append(float(element))
  8.         array2d.append(temp_list)

  9. print(array2d)
  10. #[[6.31743862e-05, 6.12392017e-05, 0.000103825728],
  11. # [0.000108191949, 8.84878402e-05, 0.00020433787],
  12. # [9.79660836e-05, 9.75082999e-05, 0.000215067582]]
复制代码
方法二:将数据以二维数组形式读入
  1. import numpy as np

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

  9. print(array)
  10. # [[6.31743862e-05 6.12392017e-05 1.03825728e-04]
  11. #  [1.08191949e-04 8.84878402e-05 2.04337870e-04]
  12. #  [9.79660836e-05 9.75082999e-05 2.15067582e-04]]
复制代码
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.jb51.net/article/266615.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具