不知道大家有没有过需要从
txt
文件中读取含有多行多列的数据的经历,当我们读入数据时,数据会以
string
的形式被读入,然而如何进行数据类型转换就成了大的问题。这里介绍一种最简单的方式和容易产生的错误使用方法。
txt
测试文件中的数据如下:
我们使用如下代码读取文件,使用
readlines()
一次性将所有数据全部读取。
with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f:
all_data = f.readlines()
print(all_data)
我们不难发现这时我们的所有数据都被读入了同一行,但是内部有三个单引号括起来的部分,与我们测试数据中的三行吻合。我们也可以看到,我们需要将这些数据分成单独的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)
首先我们需要选取第一行,使用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)
我们使用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)
方法二:将数据以二维数组形式读入
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)
码字不易,如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~
不知道大家有没有过需要从txt文件中读取含有多行多列的数据的经历,当我们读入数据时,数据会以string的形式被读入,然而如何进行数据转换就成了大的问题。这里介绍一种最简单的方式和容易产生的错误使用方法。txt测试文件中的数据如下:我们使用如下代码读取文件,使用readlines()一次性将所有数据全部读取。with open(r"C:\Users\15025\Desktop\debug1.txt", "r") as f: all_data = f.readlines() print
实际中,很多数据都是存为txt文件、csv文件等,但是在程序中处理的时候numpy数组或列表是最方便的。本文简单介绍读入txt文件以及将之转化为numpy数组或列表的方法。
1 将txt文件读为list并转化为numpy数组
import numpy as np
file = open('filename.txt')
val_list = file.readlines()
lists =[]
for string in val_list:
string = string.split('\t',3)
lists.append(string[0:2]) #只取每个string的前两项,得到
之前我们使用到的数据都是自己在控制台进行定义的,在Python处理数据时,很多情况下要多一些文件中的数据进行整理,所以就很有必要对一个文件进行读取,下面我们就看看如果使用Python去读取一个文件。
首先准备一个文件,等会我们会对这个文件进行读取,这里我把文件放到D:\python\file下,文件名为:sketch.txt,文件的内容如下:
Man: Is this the righ
split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串,这些子串会被保存到列表中(不包含分隔符),作为方法的返回值反馈回来。该方法的基本语法格式如下:
str.split(sep,maxsplit)
此方法中各部分参数的含义分别是:
str:表示要进行分割的字符串;
sep:用于指定分隔符,可以包含多个字符。此参数默认为 None,表示所有空字符,包括空格、换行符“\n”、制表符“\t”等。
maxsplit:可选参数,用于指定分割的次数,最后列表中子串的个数最多为 maxsplit+1。如
二、读取txt文件,最终输出为列表: [['123456', '123455'], ['1121121', '33333'], ['4444444', '55555']]
应用:...
1、如下图所示:f.readline()是只能读取一行,空行也会当做一行读取。并且,读取一行之后还会打印一个空行
[root@node6 ~]# cat open1.sh
#!/usr/bin/python3
with open("/root/cs.txt", 'r',) as f:
b = f.readline()
c = f.readline()
d = f.readl
file.seek(0)是重新定位在文件的第0位及开始位置
file = open("test.txt","rw") #注意这行的变动
file.seek(3) #定位到第3个
for i in file:
print i
#现在到了最后一位了
for i in file:
print i
#不会显示任何结果
String_0 = "bbb/QJ6252630247.jpg"
a = String_0.split("/")[-1]
b = String_0.split("/")[0]
print(a)
print(b)
# 结果:
# QJ6252630247.jpg
# bbb
str1= 'S1700028Y.svs'
c = str1.split('.')[0]
d = str1.split('.')[1]
e = str1.split('.')[-1]
print(c)
print(d)
print.
虽然zip命令能够很好地将数据压缩和归档进单个文件,但它不是Unix和Linux中的标准归档工具。目前,Unix和Linux上最广泛使用的归档工具是tar命令。
tar命令最开始是用来将文件写到磁带设备上归档的,然而它也能把输出写到文件里,这种用法在Linux上已经普遍用来归档数据了。
通过制定分隔符对字符串进行切片,如果参数num有指定值,则分隔符num+1个子字符串。
str.split(str="",num=string.count(str)).
str:分隔符,默认为所有空字符,包括空格、换行(\n)、制表符(\t)等。
num:分割次数。默认为-1,即分割所有。
返回值:分割后的字符串列表。