复习 使用for、while循环遍历文件,数据类型转换

简介:

1. python访问文件

1.png

通过内置函数open打开文件,看一下open函数解释:

2.png

打开文件

3.png

返回的是一个文件对象

1
fd  =  open ( '/tmp/tmp.txt' )

查看他的方法:

4.png


关闭文件:

1
fd.close()

向文件内写入:

1
fd  =  open ( '/tmp/tmp.txt' 'w' )

这样打开文件等于重写文件,文件原有的内容就覆盖掉了

1
fd.write( "a" )

这样写入文件,写入文件后不能查看到,我们必须把他关闭:

1
fd.close()

关闭之后,就可以查看到文件内的信息了。


追加内容,使用 a:

1
2
3
fd  =  open ( "/tmp/tmp.txt" "a" )
fd.write( '456/n' )
fd.close()


读文件:

1
fd  =  open ( "/tmp/tmp.txt" )

默认不写是 r 模式,下面读取文件内容read函数:

1
2
fd.read()
'123\n456\n'

默认是从第一个字符,读到最后一个字符,读完整个文件

读完之后指针跑到了整个文件的最后,所以再次运行读:

1
2
fd.read()
''

只返回空了。

1
2
fd.read( 2 )
'12'

表示读两个字符,为空时从头读到结尾。


读一行:

1
2
3
4
fd.readline()
'456\n'
fd.readline()
''

第二次读已经没有第二行了,返回一个空的字符串。


读多行:

1
2
fd.readlines()
[ '123\n' '456\n' ]

这个方法,有多少行,读多少行,并且返回一个list

每一行作为一个元素, 整个文件作为一个列表,反之,

每个元素代表每一行。


总结:

read() 函数返回的是 字符串

readline() 函数返回的是 字符串

readlines() 函数 返回的是 列表



for 循环遍历文件

1
2
3
fd  =  open ( '/tmp/tmp.txt' )
for  line  in  fd.readlines():
     print  line,

后面加个 , 号,让print后面没有\n

上面那种写法,由于生成list,如果LIST很大,就会占用很多内存资源,

更节约资源的写法如下:

1
2
3
fd  =  open ( '/tmp/tmp.txt' )
for  line  in  fd:
     print  line,

fd是一个文件对象,for循环对文件做遍历,遍历一次,取一行

这样就不会占用内存资源。


用for循环做遍历,其实就相当于使用next()函数

next()一次只取一行

5.png


2. while循环遍历文件

while 循环遍历文件

学之前,先理解fd.readline(),它是一行一行读,最后返回空字符串;

while是需要条件的,通过最后一行返回空的条件来退出循环:

6.png

使用 with open 方法打开文件执行完毕后会自动关闭

就不需要使用close关闭文件了

7.png

判断最后如果line是空的话就break,不是的话就print line

python2.6以后的版本支持这种写法。


3.统计系统剩余内存

用free 命令查看内存

8.png

其实使用free命令也是查看系统中的 /proc/meminfo

9.png


写个程序:

介绍一个字符串的方法:

str.startswith

查看介绍:

help(str.startswith)

11.png

判断字符串是以什么字符串开头的,如果是返回True,不是返回False。

找到开头的字符串后,如何取值?

用字符串的 split 方法,以字符串来分割为列表,再取列表中的元素。

12.png

结果是k,我们把结果变为m,total和free都是字符串,要进行转换

14.png

补充:free是字符串,因此比较字符串格式化后的输出类型:

15.png


4.数据类型转换(计算mac地址)

16进制转换为10进制

17.png

0x省略不写也可以

10进制转换成16进制

1
2
hex ( 10 )
'0xa'

查看hex()函数用法:

22.png

因为字符串之间不能进行加法运算的,只有数字可以。

有时候要将一些16进制的字符串进行运算,所以要转换成数字。


十进制转换为字符串

1
2
str ( 10 )
'10'

字符串转换为十进制

1
int ( '10' )



练习:

计算mac地址的下一个mac地址

查看系统的mac地址

23.png


mac地址是16进制

1
2
3
4
5
6
7
8
9
10
11
12
13
macaddr  =  '00:0C:29:D1:6F:E9'
prefix_mac  =  macaddr[: - 3 ]              ##不包含后两位的mac地址
last_two  =  macaddr[ - 2 :]                    ##取mac地址最后两位,即E9
plus_one  =  int (last_two,  16 +  1            ##将最后两位转化成10进制,并加1
if  plus_one  in  range ( 10 ):                     ##如果加1后的数字在0-9之间的话
     new_last_two  =  hex (plus_one) [ 2 :]             ##将加1的数转化成16进制,并取0x后面的数字
     new_last_two  =  '0'  +  new_last_two            ##前面判断了,plus_one是在0-9之间的数字,所以前面加个0
else
     new_last_two  =  hex (plus_one) [ 2 :]
     if  len (new_last_two)  = =  1 :                ##判断单独字符的形式,即0C这种形式。
         new_last_two  =  '0'  +  new_last_two
new_mac  =  prefix_mac  +  ':'  +  new_last_two             ##新的mac地址
print  new_mac.upper()                   ##将mac地址转为大写

这个代码囊括了mac地址最后一位是:03、E9、0C 以这三种类型结尾的情况。


5.数据类型转换(列表与字典相互转换)

字符串转换成列表:

44.png

列表转换成字符串:

49.png

字符串的join方法:

77.png


字符串转换成元组:

88.png


元组转换成字符串:

67.png


列表转换成元组:

87.png

元组转换成列表:

53.png


字典转换成列表(items方法)

338.png


列表转换成字典

dds2.png

不是所有的列表和元组可以转换成字典,只有上面这种形式的元组或列表,可以转换成字典。



本文转自 听丶飞鸟说 51CTO博客,原文链接:http://blog.51cto.com/286577399/2046268

相关文章
|
4月前
|
C语言
C语言 郝斌 数组的增删改排序代码
C语言 郝斌 数组的增删改排序代码
|
3月前
|
C#
C#基础语法(判断和循环)
C#基础语法(判断和循环)
23 1
|
3月前
|
C语言
c语言实现姓名排序———字符串复制函数,字符串比较函数
c语言实现姓名排序———字符串复制函数,字符串比较函数
|
5月前
|
C语言
C语言操作符优先级表格(建议收藏,每次看一下)
C语言操作符优先级表格(建议收藏,每次看一下)
|
8月前
|
存储 C语言
C语言教程:逐行读取数字的方法
在C语言的编程开发中,经常需要处理字符串或文本文件,并从中提取出数字。本文将介绍逐行读取数字的方法,帮助初学者更好地理解和运用。
183 0
|
8月前
|
C语言 C++
C语言循环和判断的学习
从简单循环到复杂循环
97 3
C语言循环和判断的学习
|
10月前
|
C语言
C语言刷题系列——6.(递归)实现顺序输出整数
C语言刷题系列——6.(递归)实现顺序输出整数
164 0
|
10月前
|
C语言
C语言刷题系列——10.指针 - 使用函数实现字符串部分复制
C语言刷题系列——10.指针 - 使用函数实现字符串部分复制
178 0
|
存储 C语言
【C语言程序设计】知识点汇总3——数组、字符串数组、字符串输入输出相关注意事项
【C语言程序设计】知识点汇总3——数组、字符串数组、字符串输入输出相关注意事项
230 0
【C语言程序设计】知识点汇总3——数组、字符串数组、字符串输入输出相关注意事项

热门文章

最新文章