天天看点

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

1. python访问文件

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

打开文件

返回的是一个文件对象

<code>fd </code><code>=</code> <code>open</code><code>(</code><code>'/tmp/tmp.txt'</code><code>)</code>

查看他的方法:

关闭文件:

<code>fd.close()</code>

向文件内写入:

<code>fd </code><code>=</code> <code>open</code><code>(</code><code>'/tmp/tmp.txt'</code><code>, </code><code>'w'</code><code>)</code>

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

<code>fd.write(</code><code>"a"</code><code>)</code>

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

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

追加内容,使用 a:

<code>fd </code><code>=</code> <code>open</code><code>(</code><code>"/tmp/tmp.txt"</code><code>, </code><code>"a"</code><code>)</code>

<code>fd.write(</code><code>'456/n'</code><code>)</code>

读文件:

<code>fd </code><code>=</code> <code>open</code><code>(</code><code>"/tmp/tmp.txt"</code><code>)</code>

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

<code>fd.read()</code>

<code>'123\n456\n'</code>

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

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

<code>''</code>

只返回空了。

<code>fd.read(</code><code>2</code><code>)</code>

<code>'12'</code>

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

读一行:

<code>fd.readline()</code>

<code>'456\n'</code>

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

读多行:

<code>fd.readlines()</code>

<code>[</code><code>'123\n'</code><code>, </code><code>'456\n'</code><code>]</code>

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

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

每个元素代表每一行。

总结:

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

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

readlines() 函数 返回的是 列表

for 循环遍历文件

<code>for</code> <code>line </code><code>in</code> <code>fd.readlines():</code>

<code>    </code><code>print</code> <code>line,</code>

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

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

更节约资源的写法如下:

<code>for</code> <code>line </code><code>in</code> <code>fd:</code>

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

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

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

next()一次只取一行

2. while循环遍历文件

while 循环遍历文件

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

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

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

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

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

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

3.统计系统剩余内存

用free 命令查看内存

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

写个程序:

介绍一个字符串的方法:

str.startswith

查看介绍:

help(str.startswith)

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

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

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

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

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

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

16进制转换为10进制

0x省略不写也可以

10进制转换成16进制

<code>hex</code><code>(</code><code>10</code><code>)</code>

<code>'0xa'</code>

查看hex()函数用法:

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

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

十进制转换为字符串

<code>str</code><code>(</code><code>10</code><code>)</code>

<code>'10'</code>

字符串转换为十进制

<code>int</code><code>(</code><code>'10'</code><code>)</code>

练习:

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

查看系统的mac地址

mac地址是16进制

<code>macaddr </code><code>=</code> <code>'00:0C:29:D1:6F:E9'</code>

<code>prefix_mac </code><code>=</code> <code>macaddr[:</code><code>-</code><code>3</code><code>]             </code><code>##不包含后两位的mac地址</code>

<code>last_two </code><code>=</code> <code>macaddr[</code><code>-</code><code>2</code><code>:]                   </code><code>##取mac地址最后两位,即E9</code>

<code>plus_one </code><code>=</code> <code>int</code><code>(last_two, </code><code>16</code><code>) </code><code>+</code> <code>1</code>           <code>##将最后两位转化成10进制,并加1</code>

<code>if</code> <code>plus_one </code><code>in</code> <code>range</code><code>(</code><code>10</code><code>):                    </code><code>##如果加1后的数字在0-9之间的话</code>

<code>    </code><code>new_last_two </code><code>=</code> <code>hex</code><code>(plus_one) [</code><code>2</code><code>:]            </code><code>##将加1的数转化成16进制,并取0x后面的数字</code>

<code>    </code><code>new_last_two </code><code>=</code> <code>'0'</code> <code>+</code> <code>new_last_two           </code><code>##前面判断了,plus_one是在0-9之间的数字,所以前面加个0</code>

<code>else</code><code>:</code>

<code>    </code><code>new_last_two </code><code>=</code> <code>hex</code><code>(plus_one) [</code><code>2</code><code>:]</code>

<code>    </code><code>if</code> <code>len</code><code>(new_last_two) </code><code>=</code><code>=</code> <code>1</code><code>:               </code><code>##判断单独字符的形式,即0C这种形式。</code>

<code>        </code><code>new_last_two </code><code>=</code> <code>'0'</code> <code>+</code> <code>new_last_two</code>

<code>new_mac </code><code>=</code> <code>prefix_mac </code><code>+</code> <code>':'</code> <code>+</code> <code>new_last_two            </code><code>##新的mac地址</code>

<code>print</code> <code>new_mac.upper()                  </code><code>##将mac地址转为大写</code>

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

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

字符串转换成列表:

列表转换成字符串:

字符串的join方法:

字符串转换成元组:

元组转换成字符串:

列表转换成元组:

元组转换成列表:

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

列表转换成字典

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

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