今天上完课就一直在捣鼓python的文件处理问题,现在已经11点了(这几天都没有去陪我女朋友在这里跟她说声抱歉),给大家做一点分享。
不知道大家对python中的文件处理是怎么想的,给大家看一串代码:
In [4]: f=open(r'C:\Users\13016\Desktop\python\a.txt','a+')
In [5]: f.read()
Out[5]: ''
In [6]: f.tell()
Out[6]: 112
In [7]: f.seek(0,0)
Out[7]: 0
In [8]: f.read()
Out[8]: '你好\n世界\n这个文本用来测试我对列表和切片的理解,为文件的处理打好基础\n哈哈哈哈\n我是一个小画家\n你是一个小画家'
In [9]: f.tell()
Out[9]: 112
In [10]: f.read()
Out[10]: ''
代码的下面是我的文本。下面给大家一行行分析:
1f=open(r'C:\Users\13016\Desktop\python\a.txt','a+')
这行代码的意思其实就是用open()方法打开我的路径中的一个txt文件,用什么方法打开的呢? 用的是“a+”的方法,a+的意思就是,用追加的方式在已有的文本后面追加字符串,而且+的表示,能够使得这种写法,也能够进行读取操作,但是最烦人vde一点就是,以a+的方式读取之后,它的光标是会移动到已有字符串的最后的。大家可以看见我上面的IN【5】,它输出的内容是“”,也就表示啥都没有。这就是因为光标移动到最后一个字符串末尾的原因。
我们可以用tell()方法来看看现在的光标的位置,f.tell()之后大家可以看见,我现在所占用的字节数是112个。 大家应该知道在python中中文字符每个占2个字节。 不难推算我的txt文档的最后刚好有112个字节。 那么怎样将光标从最后移动到前面呢? 这时候就要用到seek这个方法。 seek(1,2) 它有两个参数,一是参数1,表示的偏移量,一个是参数2,当参数2等于0时,为手个字符的光标,1为当前的光标,2为最后一个字符的光标。 所以f.seek(0,0),就可以将光标移到最前。此时,再进行read()。 可以看见,我文本中的内容时可以被读取出来的。 还有一些细节问题,大家可以再下面评论。
再来看看python中的列表切片问题。还是老套路,先上代码:
In [28]: for i in open(r'C:\Users\13016\Desktop\python\a.txt'):
...: print(i)
你好
世界
这个文本用来测试我对列表和切片的理解,为文件的处理打好基础
哈哈哈哈
我是一个小画家
你是一个小画家
In [29]: i[0]
Out[29]: '你'
In [30]: i[1]
Out[30]: '是'
In [50]: h=f.read()
In [51]: print(h)
你好
世界
这个文本用来测试我对列表和切片的理解,为文件的处理打好基础
哈哈哈哈
我是一个小画家
你是一个小画家
In [52]: m=h.spilt()
In [54]: print(m)
['你好', '世界', '这个文本用来测试我对列表和切片的理解,为文件的处理打好基础', '哈哈哈哈', '我是一个小画家', '你是一个小画家']
In [55]: b='\n'.join(m)
In [56]: print(b)
你好
世界
这个文本用来测试我对列表和切片的理解,为文件的处理打好基础
哈哈哈哈
我是一个小画家
你是一个小画家
In [57]: m[0]
Out[57]: '你好'
In [58]: m[1]
Out[58]: '世界'
In [59]: m[0:3]
Out[59]: ['你好', '世界', '这个文本用来测试我对列表和切片的理解,为文件的处理打好基础']
In [60]: m.append("我去牛皮")
In [61]: print(m)
['你好', '世界', '这个文本用来测试我对列表和切片的理解,为文件的处理打好基础', '哈哈哈哈', '我是一个小画家', '你是一个小画家', '我去牛皮']
上面这段代码,能够交给大家很多东西,下面我就稍微说一下:for i in “python” 语句之后,输入的print(i)实际上是一个str类型的,所以现在并不能对其进行切片操作,如果操作i[0],可以看见为最后一行的第一个。
所以为了解决这个问题,可以使用split()方法。要将它转为列表类型要使用split()方法。
将list类型转化为str类型的话使用,join()方法。
append()可以在列表最后进行添加元素
5.extend()可以在最后添加列表
大家有不懂得就直接评论一波,很晚了,要睡了。