入门--字符串处理与文件读写

1.读文件

现有文件 1.txt :

#这是四个数据
1

2
3
cbahfbchgbvgshvuig
4

可见其中有我们想要的数据以及一些注释,空行等无关信息,现在想读取文件并且输出平均值:

#知道了文件的内容
list=[]
infile=open('1.txt','r')
for line in infile:
    if line[0]=='#':
        continue
    elif line=='\n':
        continue
    elif line[0]=='c':
        continue
    else:
        list.append(float(line))
average=sum(list)/len(list)
print('%.3f',%average)

事先声明一下,希望以后的自己再看到这里时可以借助更先进的知识写一段更好的代码,但我们可以从中看出一些端倪,这里我们用 open 打开文件,open() 有两个参数,第一个是文件名,这里第二个 ‘ r ’ 是只读的意思,此外还常用 ‘ w ’ 即写入文件,下面借助 ***for 循环逐行读取***文件,通过判断过掉无用的注释与数据,注意我对空行的处理,不要用空字符串而要用 ‘ \n ’ 即换行!另外读出的数据默认是字符串,所以用 float() 进行类型的转换,默认输出保留一位小数,我们设置为保留三位,输出:

  File "c:\Users\lenovo\Desktop\python\ZDZ的博文模板.py", line 14
    print('%.3f',%average)
                 ^
SyntaxError: invalid syntax

啊这??
不慌,代码报错很正常嘛,程序员要有 debug 能力,很简单,还是基础知识,这里第二个 % 前面不需要加逗号哈,删去后输出:

2.500

如果文件中没有无关的干扰数据,会更好处理一些,将 1.txt 修改为:

1
2
3
4

我们看一下这样:

infile=open('1.txt','r')
file=infile.readlines()
print(file)

输出:

['1\n', '2\n', '3\n', '4']

上述代码是直接读取文件所有数据的方式,返回了一个列表,元素是字符串,还加上了隐藏的换行转义符号,这里我们用:

infile=open('1.txt','r')
file=infile.readlines()
f=[float(i) for i in file]
print(f)

输出:

[1.0, 2.0, 3.0, 4.0]

将元素逐个类型转换放在一个新的列表里,就可以轻松计算了
***重要声明***我这里犯了一个错误:每次打开文件一定要有关闭文件!!因此在代码后面加上:

infile.close()

从小白开始就要养成关闭文件的好习惯呦
再介绍另一个比较常用的读取文件的方法:

with open('1.txt','r') as infile:
    file=infile.readlines()
    f=[float(i) for i in file]
    print(f)

注意第一行代码,这里值得马大哈们注意的是这样写不需要显示地关闭文件啦,妈妈再也不用担心我忘记关文件啦!但是不要忘记加冒号以及缩进,众所周知,缩进是 python 的一个灵魂啊
还有一种利用 while 循环逐行读取文件的方法,简单介绍一下:

with open('1.txt','r') as infile:
    a=[]
    while True:
        line=infile.readline()
        #print(line)
        a.append(float(line))
        if not line:
            break
#print(a)

这里简单看一下方法吧,注意到我将两个 print 都注释掉了,因为有报错:

  File "c:\Users\lenovo\Desktop\python\ZDZ的博文模板.py", line 6, in <module>
    a.append(float(line))
ValueError: could not convert string to float: ''

原因可以在上面的内容中找到,这里白璧微瑕的神通广大的 python 没能在类型转化时自动将换行符去掉,所以 ‘\n’ 无法被转换为浮点数而报错
我们这里把文件的读取过程放在了 while True 的循环中,读取结束后激发 if 语句结束循环,这种写法可以为其它问题的解决提供一个思路,另外注意这里用的 readline()(读取一行) 而非 readlines()(一次读取全部)
再看一个例子:

with open('1.txt','r') as infile:
    data=infile.read()
print(data)

这里也是一次性读取了文件的全部内容,但相对于 readlines() 它是输出***字符串***,并且没有了碍眼的换行符,输出为:

1
2
3
4

我还是比较喜欢 file.read() ,便于处理(有关字符串的操作),当然还是具体问题具体分析哈,我们用字符串的 split() 函数改进我们的代码:

infile=open('1.txt','r')
data=[float(i) for i in infile.read().split()]
print(sum(data)/len(data))

我们用这段代码解释一下 split()函数的作用:

with open('1.txt','r') as infile:
    data=infile.read().split()
print(data)

输出:

['1', '2', '3', '4']

比较一下两个输出,即只在上面的代码加上 .split() 可以将字符串切分出一个列表,切分时以空格以及其它已经定义了的字符(\n,\t,\r…)作为分隔符号,分割出一个个新的字符串

下面介绍如何读取含有英文字母与数字的混合内容的文件
创建新的 1.txt:

Jan 12
Feb 11
Mar 10
Apr 9
May 8
Jun 7
Jul 6
Aug 5
Sep 4
Oct 3
Nov 2
Dec 1

现在我想用程序将月份与数字重新对应且写到一个新的文件 2.txt 中,第一步我们要能够处理这两种数据:

infile=open('2.txt','r')
months=[]
numbers=[]
for line in infile:
    words=line.split()
    months.append(words[0])
    numbers.append(words[1])
infile.close()
#别忘记关闭文件
numbers=numbers[::-1]
#将 numbers 元素倒序的方法
l=[[0]*len(numbers)]
#好像是输出12个子列表 [0]
for i in range(len(numbers)):
    l[i].append(months[i])
    l[i].append(numbers[i])
print(months)
print(numbers)
print(l)
#整理完数据后成对储存在同一个列表中

输出:

    l[i].append(months[i])
IndexError: list index out of range

额,作为一名初学者,见惯了。。我尝试输出理想中的 l 初始列表,但是为:

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

我突然想起来,这不就是列表的数乘运算吗,乘以一个常数还是输出一个列表!所以要另外想办法,这里我们想要一个二维列表,所以想到了 numpy:

import numpy as np
infile=open('2.txt','r')
months=[]
numbers=[]
for line in infile:
    words=line.split()
    months.append(words[0])
    numbers.append(words[1])
infile.close()
#别忘记关闭文件
numbers=numbers[::-1]
#将 numbers 元素倒序的方法
l=np.array([[months[i],numbers[i]] for i in range(len(numbers))])
#这种嵌套造***数组***的方式是非常省事漂亮的,新手们一定要掌握哦
print(months)
print(numbers)
print(l)

输出:

['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
[['Jan' '1']
 ['Feb' '2']
 ['Mar' '3']
 ['Apr' '4']
 ['May' '5']
 ['Jun' '6']
 ['Jul' '7']
 ['Aug' '8']
 ['Sep' '9']
 ['Oct' '10']
 ['Nov' '11']
 ['Dec' '12']]

进阶:进一步完善上述代码:

import numpy as np
infile=open('2.txt','r')
infile.readline()
data=[line.split() for line in infile]
infile.close()
print(data)
months=[data[i][0] for i in range(len(data))]
numbers=[data[i][1] for i in range(len(data))]
numbers=numbers[::-1]
l=np.array([[months[i],numbers[i]] for i in range(len(numbers))])
print(months)
print(numbers)
print(l)

输出:

[['Feb', '11'], ['Mar', '10'], ['Apr', '9'], ['May', '8'], ['Jun', '7'], ['Jul', '6'], ['Aug', '5'], ['Sep', '4'], ['Oct', '3'], ['Nov', '2'], ['Dec', '1']]
['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11']
[['Feb' '1']
 ['Mar' '2']
 ['Apr' '3']
 ['May' '4']
 ['Jun' '5']
 ['Jul' '6']
 ['Aug' '7']
 ['Sep' '8']
 ['Oct' '9']
 ['Nov' '10']
 ['Dec' '11']]

貌似不太对劲。。查阅了资料后,得知 readline 会将文件的第一行当作注释而自动从第二行开始读,所以我们需要改改文件,实在不能改就貌似不能用这个方法了,这个随着我知识的增长再谈,这里为了练习该文件为:


Jan 12
Feb 11
Mar 10
Apr 9
May 8
Jun 7
Jul 6
Aug 5
Sep 4
Oct 3
Nov 2
Dec 1

再次运行输出:

[['Jan', '12'], ['Feb', '11'], ['Mar', '10'], ['Apr', '9'], ['May', '8'], ['Jun', '7'], ['Jul', '6'], ['Aug', '5'], ['Sep', '4'], ['Oct', '3'], ['Nov', '2'], ['Dec', 
'1']]
['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']
[['Jan' '1']
 ['Feb' '2']
 ['Mar' '3']
 ['Apr' '4']
 ['May' '5']
 ['Jun' '6']
 ['Jul' '7']
 ['Aug' '8']
 ['Sep' '9']
 ['Oct' '10']
 ['Nov' '11']
 ['Dec' '12']]

问题解决,但是!如果注释中出现了中文,就有点让我烦:

    infile.readline()
UnicodeDecodeError: 'gbk' codec can't decode byte 0x97 in position 21: illegal multibyte sequence
#这里第一行注释中有中文!

参考了其他大佬们的博客后,发现这里只需要在读文件时改为:

infile=open('2.txt','r',encoding='utf-8')

可以正常输出了,这里是解码的问题,时不时让我头疼,各位要尽早搞懂啊,免得像我一样总是’无能为力‘
好了,我们已经得到了 l 列表,下面我想要把它写入一个新的文件 3.txt,我们要先创建一个新的空文件 3. txt ,然后代码如下:

#在上面的代码的基础上
outfile=open('3.txt','w')
#以写的方式打开文件 3.txt
for row in l:
    for column in row: #注意这是一个二维数组
        outfile.write(' '+column)
        #别忘了加一个空格,否则输出时会挤到一起
    outfile.write('\n')
    #写的时候换行要自己加上,在每一行的末尾加上换行符
outfile.close()

这样运行代码过后打开文件 3.txt ,发现:

 Jan 1
 Feb 2
 Mar 3
 Apr 4
 May 5
 Jun 6
 Jul 7
 Aug 8
 Sep 9
 Oct 10
 Nov 11
 Dec 12

可爱的 python 帮我们完成了将数据写入文件的操作,很激动有没有~下面升级我们的文件(其实也就是升级代码啦):

import numpy as np
infile=open('2.txt','r',encoding='utf-8')
infile.readline()
data=[line.split() for line in infile]
#每一个 line 切分后单独储存在一个子列表中
infile.close()
#print(data)
months=[data[i][0] for i in range(len(data))]
numbers=[data[i][1] for i in range(len(data))]
numbers=numbers[::-1]
#简洁实现分类
l=np.array([[months[i],numbers[i]] for i in range(len(numbers))])
#print(months)
#print(numbers)
#print(l)

##这里添加列标
outfile=open('3.txt','w')
outfile.write('*list*')
n=len(l[0])
for i in range(1,n+1):
    outfile.write('      %s'%('column%2d'%i))
    # %2d 的意思是整数占两个字符,不足的话添加空格,有人情味的是超过了的话也不会给你吃掉末尾的数据,正常输出
outfile.write('\n')

row_counter=1
for row in l:
    outfile.write('row %2d'%row_counter)
    for column in row:
        outfile.write('\t\t\t'+column)
    outfile.write('\n')
    row_counter+=1
outfile.close()
#通过添加一个行计数器实现加上行标

#提醒:对于空格的控制需要调整合适

打开文件:

*list*      column 1      column 2
row  1			Jan			1
row  2			Feb			2
row  3			Mar			3
row  4			Apr			4
row  5			May			5
row  6			Jun			6
row  7			Jul			7
row  8			Aug			8
row  9			Sep			9
row 10			Oct			10
row 11			Nov			11
row 12			Dec			12

我们得到了一个列表,为了整齐我数据调了好长时间嘞,还是知识不够硬!知识点见注释
在此基础上,我们就可以按照自己的需求改进自己的表格了,打开自己的脑洞多加尝试吧!

补充:字符串的常见操作

1.提取子串

s='ZDZ is a handsome man'
print(s[9:])
#在字符串中每个空格也算是一个元素,从零开始从左到右索引每一个元素
print(s[9:-1])
#左闭右开, -1 表示倒数第一个元素,以此类推
print(s[-1:9])
#这里什么也没有输出,说明提取只能从左往右,不能倒着来,并且仅遍历字符串一次,以结尾开头自然什么也得不到
print(s[2:-5])
#从第二个到倒数第五个,都是左闭右开

输出:

handsome man
handsome ma

Z is a handsom

请参照输出看注释,其实这种简单的东西即使你不清楚也可以现场试一试
2.s.find(‘Z is’) 与 s.count(‘Z is’)
类似的,返回括号内子串第一次出现在 s 中的位置的索引,若没有返回 -1 ,第二个当然是返回出现的次数,在此之前可以判断一下有没有这个子串:

s='ZDZ is a handsome man'
print(s.find('Z is'))
print(s.find('Zis'))
for i in ['Z is','Zis']:
    if i in s:
        print('%s is found'%i)
        print(s.count(i))
    else:
        print('NOT FOUND')

输出:

2  
-1
Z is is found
1
NOT FOUND

不需要注释吧,相信都能看懂
3.不太常用:

s='ZDZ is a handsome man'
print(s.startswith('ZDZ'))
print(s.startswith('a dog'))
print(s.endswith('an ugly man'))

输出:

True
False
False

判断字符串是否以某一段字符开始或结尾,注意是 starts,ends,加s
4.s.replace(s1,s2)
将 s 中***所有的*** s1 替换成 s2

s='ZDZ is a handsome man'
s=s.replace(s[s.find('handsome'):],'ugly man')
print(s)

输出:

ZDZ is a ugly man

这里我们综合使用了上面的用法,完成了自损,还出现了语法错误。。认真体会一下为什么哈
5.字符串拆分
s.split() 非常的有用,它可以利用中间分隔的空白字符(空格,制表符,换行符等)将 s 拆分

s='True: ZDZ is a handsome man'
print(s.split())
#生成一个列表
print(s.split(':'))
#按照指定的文本作为分割依据
print(s.split('~'))
#没有 ~ ,所以分割出一个字符串,仍然储存在一个列表中

输出:

['True:', 'ZDZ', 'is', 'a', 'handsome', 'man']
['True', ' ZDZ is a handsome man']
['True: ZDZ is a handsome man']

11.28:
继续哈,学了一上午英语(背靠),要吐了,还好有 python~
接上:
6.如果你将一个文件的书局读入一个字符串中,让后想组成一个由每一行为元素构成的列表中,可以这样:

data=open('2.txt','r')
infile=data.readlines()
print(infile)

看输出:

['ZDZ is\n', 'a handsome\n', 'man']
#文件内容知道了吧

美中不足的是前两个元素带有换行符,怎么解决呢?其实前面也讲过了,可以边读边 split ,这里再介绍一个用法:

data='ZDZ is\na handsome\nman'
#假设读完文件得到一个这样的字符串
print(data)
#输出时换行符发挥了作用
data0=data.splitlines()
print(data0)
# data.splitlines()按照每一行切分到一个列表中
data1=data.split()
print(data1)
#见输出体会不同之处

#还可以这样(活学活用)
data2=data.split('\n')
print(data2)

输出:

ZDZ is
a handsome
man
['ZDZ is', 'a handsome', 'man']
['ZDZ', 'is', 'a', 'handsome', 'man']
['ZDZ is', 'a handsome', 'man']

7.控制大小写

data='ZDZ is a handsome man'
daxie=data.upper()
xiaoxie=data.lower()
# s.upper() 与 s.lower() 函数
print(daxie)
print(xiaoxie)

一笔带过喽

ZDZ IS A HANDSOME MAN
zdz is a handsome man

8.更改字符串
前面讲过了 s.replace(),这里扩展一下:

data='ZDZ is a handsome man'
#data[7]='e'
# python 字符串不支持直接替换哦
print(data)
data0=data.replace('a','e')
#全部替换
print(data0)
data1=data[:7]+'e'+data[8:]
#实现指定位置的替换,当然替换一两个还不算麻烦
print(data1)

输出:

ZDZ is a handsome man
ZDZ is e hendsome men
ZDZ is e handsome man

为什么会注释掉一行呢?加上的话会报错:

    data[7]='e'
TypeError: 'str' object does not support item assignment

因为 python 是不支持直接替换的哦
9.验证只含数字的字符串

a='123'
b='1 23'
print(a.isdigit())
print(b.isdigit())

返回布尔值:

True
False

10.strip() 函数
移去首尾的字符,语法: s.strip(char),不填参数时自动移除首尾的空格(包括换行符,制表符等),填参数后移除首尾出现的参数,一旦出现其它字符就停止搜索:

#参见输出
a='\n\t  1563125632husgcbvy  \t'
print(a.strip())
#参照参数功能
b='123ucvygyugrj213'
print(b.strip('123'))
#从输出可以看出,参数是字符串时与顺序无关,一切出现在参数中的单个字符只要在首尾中出现并且***没有夹杂任何其它字符***时就会被除去
print(b.rstrip('321'))
#右除去
print(b.lstrip('321'))
#左除去

输出:

1563125632husgcbvy
ucvygyugrj
123ucvygyugrj
ucvygyugrj213

11.是不是全是空白字符

print('  '.isspace())
print('\n'.isspace())
print('\t'.isspace())
#空格,换行符与制表符都是空白字符
print(''.isspace())
#空白字符构成的字符串不等同于空白字符串哦

#另一种方法检验是不是全是空白字符
a='\n \t'
#b='\t\nn\'
#注意字符串输入右斜杠要加上转义字符右斜杠,否则报错
c='\t\nn\\'
print(a.strip()=='')
#print(b.strip()=='')
print(c.strip()=='')
print(c)
#只显示一个斜杠

返回bool值:

True
True
True
False
True
False

n\

不转义时报错:

    b='\t\nn\'
             ^
SyntaxError: EOL while scanning string literal

12.字符串的连接

l0=['ZDZ','is','a','handsome','man']
s0=','.join(l0)
#以逗号为间隔连接成***一个***新的字符串,注意:join() 函数地对象是字符串为元素的***列表***,返回字符串
s1=' '.join(l0)
#以空格为间隔
print(s0,type(s0))
print(s1)
#都输出一个新的字符串

s2='ZDZ is a handsome man'
l1=s2.split()
new_s=' '.join(l1[2:])
print(new_s)
#组合利用 split() 与 join() 可以任意重组,剪切字符串哦

输出:

ZDZ,is,a,handsome,man <class 'str'>
ZDZ is a handsome man
a handsome man

读文件进阶

文件 4.txt,内容如下:

(0,0.5)      (0.6,1)      (1.1,1.5)
(1.6,2)      (2.1,2.6)      (2.6,3)
(3,4)        (4,5.2)      (5.5,6.3)

现在想把每一个元组为一个元素储存在同一个列表中,
第一次尝试:

infile=open('4.txt','r')
data=infile.readlines()
infile.close()
print(data)

理所当然地输出(求求自己动动脑子吧!):

['(0,0.5)      (0.6,1)      (1.1,1.5)\n', '(1.6,2)      (2.1,2.6)      (2.6,3)\n', '(3,4)        (4,5.2)      (5.5,6.3)']

改进后:

infile=open('4.txt','r')
data=infile.readlines()
#每一行为一个字符串储存在列表中
infile.close()
data0=' '.join([data[i].strip() for i in range(len(data))])
print(data0)
#先删换行符再以空格组合完全消去了行的限制,见输出
l=data0.split()
print(l)
#元素为字符串
l0=[eval(i) for i in l]
print(l0)
#用 eval() 函数删去引号

输出:

(0,0.5)      (0.6,1)      (1.1,1.5) (1.6,2)      (2.1,2.6)      (2.6,3) (3,4)        (4,5.2)      (5.5,6.3)
['(0,0.5)', '(0.6,1)', '(1.1,1.5)', '(1.6,2)', '(2.1,2.6)', '(2.6,3)', '(3,4)', '(4,5.2)', '(5.5,6.3)']
[(0, 0.5), (0.6, 1), (1.1, 1.5), (1.6, 2), (2.1, 2.6), (2.6, 3), (3, 4), (4, 5.2), (5.5, 6.3)]

我分步进行改进,是出于为大家着想啊,朋友们不要以为我啰嗦哈:
再改进(简化有关 l 过程):

infile=open('4.txt','r')
data=infile.readlines()
infile.close()
data0=' '.join([data[i].strip() for i in range(len(data))])
l0=[eval(i) for i in data0.split()]
print(l0)

输出同上
抱着学习知识的目的,我尽可能多提供一些思路供大家参考:

with open('4.txt','r') as infile:
    lines=infile.readlines()
    print(lines)
    l=[]
    for line in lines:
        words=line.split()
        print(words)
        for word in words:
            word=word[1:-1]
            print(word)
            #这是一个值得借鉴的思路,要理解字符串中的括号是作为单个字符而存在的,所以可以通过控制字符串的索引位置消去这两个括号,见输出
            n1,n2=word.split(',')
            # n1,n2 是字符串,需要进行类型转换,这里用到了列表元素按顺序赋给变量的方法哦
            tup=(float(n1),float(n2))
            #创建一个新的元组
            l.append(tup)
print(l)

输出:

['(0,0.5)      (0.6,1)      (1.1,1.5)\n', '(1.6,2)      (2.1,2.6)      (2.6,3)\n', '(3,4)        (4,5.2)      (5.5,6.3)']
['(0,0.5)', '(0.6,1)', '(1.1,1.5)']
0,0.5
0.6,1
1.1,1.5
['(1.6,2)', '(2.1,2.6)', '(2.6,3)']
1.6,2
2.1,2.6
2.6,3
['(3,4)', '(4,5.2)', '(5.5,6.3)']
3,4
4,5.2
5.5,6.3
[(0.0, 0.5), (0.6, 1.0), (1.1, 1.5), (1.6, 2.0), (2.1, 2.6), (2.6, 3.0), (3.0, 4.0), (4.0, 5.2), (5.5, 6.3)]

我们在进行写代码的时候可以多在几个关键的地方加上 print()以防事与愿违,写完代码后再去除没用的print()这里为了大家看的方便就不去了,当然上述代码可以紧凑实现,请有兴趣的自行改进哈,这是一个提升自我的机会哦
但是!!
如果文件 4.txt 是这样的:

(0 , 0.5)      (0.6, 1)      (1.1 ,1.5)
(1 .6,2)      (2.1 , 2.6)      (2.6 ,3)
(3 ,4)        (4, 5.2)      (5.5,6.3)

括号中无规律地多了一些空格,就难处理了一些,我们先尝试读取它:

infile=open('4.txt','r')
data=infile.readlines()
infile.close()
data0=' '.join([data[i].strip() for i in range(len(data))])
l=data0.split()
print(l)

输出:

['(0', ',', '0.5)', '(0.6,', '1)', '(1.1', ',1.5)', '(1', '.6,2)', '(2.1', ',', '2.6)', '(2.6', ',3)', '(3', ',4)', '(4,', '5.2)', '(5.5,6.3)']

老套路不好使了,括号中的空格起到了分割的作用,使我们的元组变得支离破碎,再另想办法:不难发现,这里的关键不就是去掉这些烦人的空格吗,去掉后就与原来一样了,怎么去掉呢,聪明的你可以先思考一下再往下读哦:

infile=open('4.txt','r')
data=infile.readlines()
infile.close()
data0=' '.join([data[i].strip() for i in range(len(data))])
print(data0)
data1=data0.replace(' ','')
#去空格的关键操作,用 replace()函数一下子全搞定!
print(data1)
#这一下子让我意外,因为 data0 的括号内外有不同大小的空格,这一下子将不同大小的空格全去掉了,但又想了想这太合理了!不管多大的空格都是由小空格构成的呀~哈哈哈
data2=data1.strip('()').split(')(')
#先去掉两端的括号,再以 )( 为分割依据分割每一组数据
l=[(eval(i)) for i in data2]
#放到新元组中
print(l)

输出:

(0 , 0.5)      (0.6, 1)      (1.1 ,1.5) (1 .6,2)      (2.1 , 2.6)      (2.6 ,3) (3 ,4)        (4, 5.2)      (5.5,6.3)
(0,0.5)(0.6,1)(1.1,1.5)(1.6,2)(2.1,2.6)(2.6,3)(3,4)(4,5.2)(5.5,6.3)
[(0, 0.5), (0.6, 1), (1.1, 1.5), (1.6, 2), (2.1, 2.6), (2.6, 3), (3, 4), (4, 5.2), (5.5, 6.3)]

还可以这样:

infile=open('4.txt','r')
data=infile.readlines()
infile.close()
data0=' '.join([data[i].strip() for i in range(len(data))])
data1=data0.replace(' ','')
data2='['+data1.replace(')','),').strip(',')+']'
#合理利用 replace() 函数,这里构造了一个字符串类型的结果‘列表’,然后强行 eval() 掉就得啦
print(eval(data2))

输出:

[(0, 0.5), (0.6, 1), (1.1, 1.5), (1.6, 2), (2.1, 2.6), (2.6, 3), (3, 4), (4, 5.2), (5.5, 6.3)]

有没有很赞的样子?

CSV文件

简介:CSV表示逗号分隔值Comma Separated Values,也就是电子表格啦,此类型的文件读写有那么一点不同之处,这里单独介绍一下:
给出一个表格:
入门--字符串处理与文件读写_第1张图片
文件名 表格.csv,将它放在我的 python 文件夹中,尝试进行读取操作,直接上干货啦~:


To be continued…
#道歉声明:我刚才读了一遍这篇文章,发现其中有一些打字错误与一些不足,我已经做了补充,但是当我保存的那一刻,它断网了啊啊啊~我要疯了,修改的白废了。。所以您在阅读过程中的一些不适请谅解本人的疏忽,我会尽快及时再次改正,谢谢理解

你可能感兴趣的:(python学习)