2.6 使用for循环遍历文件 2.7 使用while循环遍历文件 2.8 统计系统剩余的内存 2.9 数据类型转换计算(计算mac地址) 3.0 数据类型转换(列表与字典相互转换)...
2019独角兽企业重金招聘Python工程师标准>>>
2.6 使用for循环遍历文件
需要访问文件,那么首先需要打开文件
open ---内置函数
help(open)
打开(…)
打开(名称[,模式[,缓冲]])->文件对象
使用file()类型打开文件,返回文件对象。这是
打开文件的首选方法。看到文件。获取更多信息。
类型 | 说明 |
---|---|
r: | 以读的方式打开 |
w: | 以写的方式打开(文件不存在就会创建,文件存在将会进行覆盖) |
a: | 以追加的模式 |
r+: | 以读写模式打开 |
w+: | 以读写模式打开(参见w) |
a+: | 以读写模式打开(参见a) |
rb: | 以二进制读的模式打开(打开二进制文件的时候,就需要加上这个) |
wb: | 以二进制写的模式打开(参见b) |
ab: | 以二进制追加的模式打开(参见a) |
rb+: | 以二进制读写模式打开(参见r+) |
wb+: | 以二进制读写模式打开(参见w+) |
ab+: | 以二进制读写模式打开(参见a+) |
例:
In [2]: open('/tmp/1.txt')
Out[2]: <open file '/tmp/1.txt', mode 'r' at 0x7fb5c999ed20>
如果没有标明打开方式,将默认以 r 的方式进行打开 打开的时候,返回的是一个文件对象
需要拿一个变量进行接收
In [2]: open('/tmp/1.txt')
Out[2]: <open file '/tmp/1.txt', mode 'r' at 0x7fb5c999ed20>In [3]: fd = open('/tmp/1.txt')In [4]: fd //这个变量为文件描述符
Out[4]: <open file '/tmp/1.txt', mode 'r' at 0x7fb5c999ec90>
.close 关闭打开的文件
In [10]: fd
Out[10]: <closed file '/tmp/1.txt', mode 'r' at 0x7fb5c999ec90>
以w方式进行打开(将会截断文件这时,才从源文件中打开,将没有任何信息)
In [11]: fd = open('/tmp/1.txt','w')In [12]: fd.write("a")In [14]: fd.close() //这个操作,个人觉得理解为保存退出,会比较好,或者说是不再对文件进行操作
另外一个复制的ssh上,可以实时查看文件的变化
[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# cat /tmp/1.txt
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
123,456,789
[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# cat /tmp/1.txt
a[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# //这里可以看到,源文件已经被改变
- a 方式进行打开
.write 写文件,只能以字符串的方式进行写
In [36]: fd.write(123)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-36-e571bc99ffd3> in <module>()
----> 1 fd.write(123)TypeError: expected a character buffer objectIn [37]: fd.write('aabbcc\n')a123/n123/nabc/n[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# cat /tmp/1.txt
a123/n123/nabc/naabbccIn [15]: fd = open('/tmp/1.txt','a')In [16]: fd.write('123/n')In [17]: fd.write('123/n')In [18]: fd.write('abc/n')In [19]: fd.close()a[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# cat /tmp/1.txt
a123/n123/nabc/n[root@iZwz9jd3zodsn1e1yy2nlkZ ~]#
- .read 读取文件(返回的字符串)
In [20]: fd = open('/tmp/1.txt')In [21]: fd.read()
Out[21]: 'a123/n123/nabc/n'In [22]: fd.read()
Out[22]: '' //第二次读的时候,就没有信息了。
第二次读的时候,就没有信息了,因为,读取对象,是从头到尾进行读取,指针一旦读到文件的最后,那么将不能再读出任何信息
In [40]: fd.read(2) //读了两个指针位
Out[40]: 'a1'In [41]: fd.read()
Out[41]: '23/n123/nabc/naabbcc\n' //因为指针位置移动了。将从之后的进行操作
- .readline()
读取一行(返回的是字符串)
In [43]: fd = open('/tmp/1.txt')In [44]: fd.readline()
Out[44]: '123\n'In [45]: fd.readline()
Out[45]: '456\n'In [46]: fd.readline()
Out[46]: '789\n'In [47]: fd.readline()
Out[47]: 'abc\n'In [48]: fd.readline()
Out[48]: 'def\n'In [49]: fd.readline()
Out[49]: ''In [50]: fd = open('/tmp/1.txt')In [51]: fd.readline(2) //如果加入数值,貌似和read效果一样
Out[51]: '12'In [52]: fd.readline(5)
Out[52]: '3\n
- .readlines()
读取多行 将文件以列表形式返回
In [54]: fd = open('/tmp/1.txt')In [55]: fd.readlines()
Out[55]: ['123\n', '456\n', '789\n', 'abc\n', 'def\n']In [56]: fd = open('/tmp/1.txt')In [57]: fd.readlines(2)
Out[57]: ['123\n', '456\n', '789\n', 'abc\n', 'def\n']
案例
循环读取文件
#!/user/bin/pythonfd.open('/tmp/1.txt')
for line in fd.readlines():print line, //因为文件里面默认就有一个换行,如果不加抑制换行,那读取的结果就是两个换行[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# !py
python 1.py
123
456
789
abc
def
[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# !vi
vi 1.py
[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# !pyt
python 1.py
123456789abcdef
注:fd.readlines() 在程序里面加上这个的话,如果是特别大的文件,那么将会消耗很多的内存,以为,这个产生的是一个列表,因为fd 默认赋值到的时候是对象;
所以,可以这么来写
#!/user/bin/pythonfd = open('/tmp/1.txt')
for line in fd:print line[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# !pyt
python 1.py
123456789abcdef
这样来循环,等同于使用了默认的一个.next()的方法
In [58]: fd = open('/tmp/1.txt')In [59]: fd.next()
Out[59]: '123\n'In [60]: fd.next()
Out[60]: '456\n'In [61]: fd.next()
Out[61]: '789\n'In [62]: fd.next()
Out[62]: 'abc\n'In [63]: fd.next()
Out[63]: 'def\n'In [64]: fd.next()
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-64-3df4eef70a28> in <module>()
----> 1 fd.next()
要养成一个好习惯,使用完对象以后,主动的进行fd.close,不然将会占用内存,虽然对象也会自动关闭,当这也需要一定的时间
2.7 使用while循环遍历文件
#!/usr/bin/pythonwith open('/tmp/1.txt') as fd:while True:line = fd.readline()if not line:breakprint line,[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# python 2.py
123
456
789
abc
def
with open,因为with为语法,需要做换行符,这样可以免去手动关闭文件对象的命令,如果不那么做,这个脚本将会对内存有一定的占用
2.8 统计系统剩余的内存
案例,统计free 内存
因为命令也是对文件的信息,进行获取,所以free 取的就是/proc/meminfo
#!/usr/bin/pythonwith open('/proc/meminfo') as fd:for line in fd:if line.startswith('MemTotal'):total = line.split()[1]continue //退出本次循环if line.startswith('MemFree'):free = line.split()[1]bareak //退出循环
print ('total = %s\nfree = %.2f' % (total,(int(free)/1024.0))+'M')[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# python 3.py
total = 3881688
free = 2043876
[root@iZwz9jd3zodsn1e1yy2nlkZ ~]# freetotal used free shared buff/cache available
Mem: 3881688 130204 2045580 360 1705904 3476228
Swap: 0 0 0
%.2f 字符串格式化,定义为浮点数,并且有2位小数
In [73]: for i in range(3):...: print type(i),i...:
<type 'int'> 0
<type 'int'> 1
<type 'int'> 2In [75]: for i in range(3):...: a = '%f' %i...: print type(a),i...:
<type 'str'> 0
<type 'str'> 1
<type 'str'> 2
字符串方法 .startswith()
startswith(…)
.startswith(prefix[, start[, end]]) -> bool
如果S以指定的前缀开头,则返回True,否则返回False。
可选的开始,测试从那个位置开始。
对于可选的端,停止在那个位置比较S。
前缀也可以是尝试的字符串元组。
- .split 分割字符串
In [69]: b = '123 abc ABC'In [70]: b.split()
Out[70]: ['123', 'abc', 'ABC']In [71]: b.split()[1]
Out[71]: 'abc'
2.9 数据类型转换计算(计算mac地址)
类型转换
int()函数
十六进制字符串转为十进制
int('12',16)
18int('0x12',12)
18
0x表示1十六进制的前缀
十进制转为十六进制
hex()
小练习
求mac地址的下一个地址
- 所谓的下一个mac地址,就是mac地址最后的一个位 + 1
- 首先知道一个mac地址
#!/usr/bin/evn pythonmacaddr = '00-FF-60-FA-B9-A3'
prefix_mac = macaddr[:-3]
last_two = macaddr[-2:]
plus_one = int(last_two, 16) +1
if plus_one in range(10):new_last_two = hex(plus_one)[2:]new_last_two = '0' + new_last_two
else:new_last_two = hex(plus_one)[2:]if len(new_last_two) ==1:new_last_two = '0' + new_last_two
new_mac = prefix_mac + ':' + new_last_two
print new_mac.upper()
3.0 数据类型转换(列表与字典相互转换)
字符串转列表
list(string)
In [80]: list(s)
Out[80]: ['a', 'b', 'c']In [81]: s = 'abc'In [82]: list(s)
Out[82]: ['a', 'b', 'c']
列表转字符串
'',join(list)
In [88]: l
Out[88]: ['a', 'b', 'c']In [89]: ''.join(l)
Out[89]: 'abc'
可以定义分隔符
In [90]: '.'.join(l)
Out[90]: 'a.b.c'In [91]: ':'.join(l)
Out[91]: 'a:b:c'
字符串转元组
tuple(string)
In [92]: s
Out[92]: 'abc'In [93]: t = tuple(s)In [94]: t
Out[94]: ('a', 'b', 'c')
元组转字符串
''.join(tuple)
In [94]: t
Out[94]: ('a', 'b', 'c')In [95]: ':'.join(t)
Out[95]: 'a:b:c'
字典转换为列表
In [100]: dic1
Out[100]: {'a': 1, 'b': 2}In [101]: dic1.items()
Out[101]: [('a', 1), ('b', 2)]
列表转换为字典
in [105]: l1
Out[105]: [('a', 1), ('b', 2)]In [106]: dict(l1)
Out[106]: {'a': 1, 'b': 2}
转载于:https://my.oschina.net/nova12315/blog/2960549
2.6 使用for循环遍历文件 2.7 使用while循环遍历文件 2.8 统计系统剩余的内存 2.9 数据类型转换计算(计算mac地址) 3.0 数据类型转换(列表与字典相互转换)...相关推荐
- python字符串转换元组_python 字符串,列表,元组,字典相互转换
1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} 字典转为字符串,返回: {'age': 7, 'name': 'Zara', 'cla ...
- python 列表根据汉字拼音进行排序 / 查询结果集(列表嵌套字典)根据特定key字段拼音进行整体排序
基于 pypinyin 的拼音首字排序 * 以下方法皆只根据词语的第一个汉字进行排序 1.基于列表 进行排序 from pypinyin import lazy_pinyindef pinyin_so ...
- python 元组遍历_Python中的for循环:元组、列表、字典的遍历和相互转化
Python for循环可以遍历任何序列的项目,如列表.字符串.元组.字典.集合等序列类型. 语法: for循环的语法格式如下: for iterating_var in sequence:state ...
- 列表和字典循环遍历时的删除问题,集合
1.for 循环的问题 : for 循环后面也有else,也可以使用break和continue(使用方法跟while一样). while 条件: for ...
- python字典编码_Python列表,字典,元组,字符串操作,文件操作,字符编码
1. 列表操作 1.1 列表的定义: names = ["wangjing", "wangjun", "hashiqi"] names[0] ...
- join,列表和字典用for循环的删除,集合,深浅拷贝
1.join() 将列表转换成字符串,并且每个字符之间用另一个字符连接起来,join后面必须是可迭代的对象(字符串,列表,元组,字典,集合),数字不能迭代 例如: 1 s = ['a','b','c' ...
- Python读取excel文件可读取xlsx格式和xls格式可直接读取超链接,读出为字典格式(列表套字典),处理合并单元格的问题
直接上代码:(代码有注释,代码下方有解释) 1.可读取excel中的xlsx格式文件 2.可读取excel中的xls格式文件 3.可直接读取网页上的excel的超链接 4.解决有列合并的情况以及行合并 ...
- Python 基础(二)[列表,字典,文件操作]
本章内容: 列表 & 元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 Python 语言从未如此性感! 列表 Python中最基本的数据结构 Python有6个序列的内 ...
- python中遍历列表和字典的方法
一般来说,在python中使用遍历是非常简单的,只要通过for循环就可以了,但是还是有一些技巧可以使用. 列表的遍历 方法一:通过for循环 li = [i for i in range(10)] f ...
- python3 列表 元组 字典 文件 编码转码
列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 1 na ...
最新文章
- 面试官:如何做 API 接口防刷??
- shell脚本的规范
- ac9560不支持承载_IPFS 最新进展:0.5 版本改进较大,已出现系统级支持 | 火星号精选...
- webflux系列--reactor源码(二)
- c得到当前时分秒 linux_Linuxc - Linux系统下的时间知识点
- 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
- 关于《高性能JavaScript》制表(Memoization)笔记
- 计算机英语短文互译,中英文互译的英语短文
- 51nod1812树的双直径(换根树DP)
- VMware之虚拟机迁移
- db2 reorg(转)
- C++ 基础练习 圆的面积
- 线性代数笔记26——傅立叶级数
- 个人搭建独立博客,哪个程序比较好用
- FHD、4K、8K为何物
- 【Python机器学习】聚类算法任务,评价指标SC、DBI、ZQ等系数详解和实战演示(附源码 图文解释)
- Flash Builder常见菊紧问题集锦
- [转]win32基础编程知识
- Windows 11 上使用安卓应用
- sarscape5.6.2 结果在arcgis中制图(2可以在envi里调好色带导入arcgis)