使用for,while循环遍历文件
2017-12-28 20:07
381 查看
一、使用for循环来打开文件
1.对文件进行操作我们需要用到open模块。
(1)open模块的用法:open(name(文件名,最好用绝对路径)[mode(以什么模式打开),buffering(缓存)]) 他返回的是一个文件对象。
(2)mode 模式:
1.r: 以只读模式打开 只能读,不能写,必须打开一个存在的文件,如果文件不存在会报错。
2.w:以写模式打开 如果文件不存在则创建,如果文件存在,会覆盖文件内容。所以要小心使用写模式。
3.a:以追加模式打开 如果文件存在,会在文件最后追加内容。如果文件不存在也会创建。
4.r+:以读写模式打开
5.w+: 以读写模式打开,和w模式类似。慎用。
6.a+ :以读写模式打开,和a模式类似。
7.rb : 以二进制读模式打开
8.wb: 以二进制写模式打开 和w模式类似
9.ab:以二进制追加模式打开 和a模式类似
10rb+: 以二进制读写模式打开 和r+模式类似
11.wb+:以二进制读写模式打开 和w+类似
12.ab+:以二进制读写模式打开 和a+类似
2.open模块的方法和用法
1.用法open('/root/1.txt') 如果是当前路径可以直接写文件名,如果不是写绝对路径。
可以看到返回的是一个文件对象 如果没指定模式的话,默认是以只读模式打开。
可以使用一个变量接收一下,通常这个变量叫做文件描述符。
fd = open('1.txt')
typt(fd)
类型是file.
2.open 里的方法
(1)close()方法:关闭文件描述符。关闭后不再访问文件。
fd.close()
如果在读取数据就会报错:
(2).write方法:写入文件,这个方法不是是只读模式打开。
写入的东西,必须是字符串其他都不接受,会报错。
fd.write('abc')
fd.close()
当写入完成后,必须close 关闭文件后才能显示,写入的内容,如果文件已存在,会覆盖原有内容。
(3)read()方法:对文件从头读到尾
fd.read() 返回字符串。
可以发现,read()方法在执行一次就不会出现内容了,这是因为read是从头读到尾的,当读完了以后,指针停在了末尾,已经没有任务内容了,所以显示为空。
如何移动指针呢,在后期会使用到seek()方法,和tell()方法。
fd.read(2) 这样可以指定读几个字符。指针从第一位读到第二位。
不加就是从头读到尾
(4)readline()方法: 读一行内容,返回字符串。
fd.readline()
(5)readlines()方法:读多行内容,并且返回的是一个list 列表,每一行的内容为一个元素,
fd.readlines()
一般读文件主要就是这3种方法。
(6)next()方法:类似readline 也是读取一行。
二、使用for循环来读文件
1.例子
fd = open('1.txt')for a in fd.readlines()print afd.close()
readlines()有个特点,就是会在每一行的最后加上一个换行符。
对比一下源文件,会发现输出的每一行下面多了一个空行。如果要消除这个空行只要加一个, 因为print 默认也会输出一个换行。就有了2个换行了
fd = open('1.txt')
fd.close()
for a in fd.readlines()
print a,
用这种方式的话有一个问题,如果这个文件很大,几个G。在定义变量的时候不会产生多大内存,只在内存中创建了一个对象,当执行到readlines的时候,会产生一个list,当几个G 的内容在list中,会占用大量内存。不建议这么写。
推荐这种写法:
fd = open('1.txt')
fd.close()
for a in fd
print a,
可以看到和readlines 输出的结果没什么区别,这为什么也可以呢?
这是因为fd是个对象,就像xrange一样。遍历一次,就取里面的一行,不会像readlines那样先生成一个大列表。不占用内存。建议以后对文件做遍历用这种写法
三、使用while循环来遍历文件.
1.如何使用while循环遍历文件
fd = open('1.txt')
fd.close()
while True:
line = fd.readline()
if not line: #not line 也就是true。当最后一行为空为真的时候,结束循环。
break
print line
fd.close()
2.with open 用法
with open 的使用和open 一样,用with open 可以不用关闭文件也就是不用close()
with open('1.txt') as fd
while True:
line = fd.readline()
if not line: 。
break
print line
可以看到结果是一样的。
with open的语法 和if for while 相似, 在他后面的代码块也是需要缩进的。
用法是:with open('filename') as fd:
这里的as 就相当于是赋值变量。和 fd = open('filename') 一样
使用with open语法呢,是不需要close()的,当代码块执行完最后一行,缩进和with open在一行的时候,默认就关闭了文件。
习题
1. 现有一个文件test.txt ,内容如下:
1234efgh
abcd5678
要求读出文件内容,对内容的顺序进行编辑,然后重新写入到文件,使其为如下形式
12345678
abcdefgh
注意事项:使用pycharm的同学在调试程序时,如果程序对文件进行了操作,然后手动修改了文件,则要在pycharm中,程序所在的目录上点击右键,选择clean python compiled files,否则可能会报错
A 65
B 66
C 67
...
x 120
y 121
z 122
1.对文件进行操作我们需要用到open模块。
(1)open模块的用法:open(name(文件名,最好用绝对路径)[mode(以什么模式打开),buffering(缓存)]) 他返回的是一个文件对象。
(2)mode 模式:
1.r: 以只读模式打开 只能读,不能写,必须打开一个存在的文件,如果文件不存在会报错。
2.w:以写模式打开 如果文件不存在则创建,如果文件存在,会覆盖文件内容。所以要小心使用写模式。
3.a:以追加模式打开 如果文件存在,会在文件最后追加内容。如果文件不存在也会创建。
4.r+:以读写模式打开
5.w+: 以读写模式打开,和w模式类似。慎用。
6.a+ :以读写模式打开,和a模式类似。
7.rb : 以二进制读模式打开
8.wb: 以二进制写模式打开 和w模式类似
9.ab:以二进制追加模式打开 和a模式类似
10rb+: 以二进制读写模式打开 和r+模式类似
11.wb+:以二进制读写模式打开 和w+类似
12.ab+:以二进制读写模式打开 和a+类似
2.open模块的方法和用法
1.用法open('/root/1.txt') 如果是当前路径可以直接写文件名,如果不是写绝对路径。
可以看到返回的是一个文件对象 如果没指定模式的话,默认是以只读模式打开。
可以使用一个变量接收一下,通常这个变量叫做文件描述符。
fd = open('1.txt')
typt(fd)
类型是file.
2.open 里的方法
(1)close()方法:关闭文件描述符。关闭后不再访问文件。
fd.close()
如果在读取数据就会报错:
(2).write方法:写入文件,这个方法不是是只读模式打开。
写入的东西,必须是字符串其他都不接受,会报错。
fd.write('abc')
fd.close()
当写入完成后,必须close 关闭文件后才能显示,写入的内容,如果文件已存在,会覆盖原有内容。
(3)read()方法:对文件从头读到尾
fd.read() 返回字符串。
可以发现,read()方法在执行一次就不会出现内容了,这是因为read是从头读到尾的,当读完了以后,指针停在了末尾,已经没有任务内容了,所以显示为空。
如何移动指针呢,在后期会使用到seek()方法,和tell()方法。
fd.read(2) 这样可以指定读几个字符。指针从第一位读到第二位。
不加就是从头读到尾
(4)readline()方法: 读一行内容,返回字符串。
fd.readline()
(5)readlines()方法:读多行内容,并且返回的是一个list 列表,每一行的内容为一个元素,
fd.readlines()
一般读文件主要就是这3种方法。
(6)next()方法:类似readline 也是读取一行。
二、使用for循环来读文件
1.例子
fd = open('1.txt')for a in fd.readlines()print afd.close()
readlines()有个特点,就是会在每一行的最后加上一个换行符。
对比一下源文件,会发现输出的每一行下面多了一个空行。如果要消除这个空行只要加一个, 因为print 默认也会输出一个换行。就有了2个换行了
fd = open('1.txt')
fd.close()
for a in fd.readlines()
print a,
用这种方式的话有一个问题,如果这个文件很大,几个G。在定义变量的时候不会产生多大内存,只在内存中创建了一个对象,当执行到readlines的时候,会产生一个list,当几个G 的内容在list中,会占用大量内存。不建议这么写。
推荐这种写法:
fd = open('1.txt')
fd.close()
for a in fd
print a,
可以看到和readlines 输出的结果没什么区别,这为什么也可以呢?
这是因为fd是个对象,就像xrange一样。遍历一次,就取里面的一行,不会像readlines那样先生成一个大列表。不占用内存。建议以后对文件做遍历用这种写法
三、使用while循环来遍历文件.
1.如何使用while循环遍历文件
fd = open('1.txt')
fd.close()
while True:
line = fd.readline()
if not line: #not line 也就是true。当最后一行为空为真的时候,结束循环。
break
print line
fd.close()
2.with open 用法
with open 的使用和open 一样,用with open 可以不用关闭文件也就是不用close()
with open('1.txt') as fd
while True:
line = fd.readline()
if not line: 。
break
print line
可以看到结果是一样的。
with open的语法 和if for while 相似, 在他后面的代码块也是需要缩进的。
用法是:with open('filename') as fd:
这里的as 就相当于是赋值变量。和 fd = open('filename') 一样
使用with open语法呢,是不需要close()的,当代码块执行完最后一行,缩进和with open在一行的时候,默认就关闭了文件。
习题
1. 现有一个文件test.txt ,内容如下:
1234efgh
abcd5678
要求读出文件内容,对内容的顺序进行编辑,然后重新写入到文件,使其为如下形式
12345678
abcdefgh
注意事项:使用pycharm的同学在调试程序时,如果程序对文件进行了操作,然后手动修改了文件,则要在pycharm中,程序所在的目录上点击右键,选择clean python compiled files,否则可能会报错
list1 = list() with open('test.txt') as fd: for line in fd.readlines(): list1.append(line) a = list1[0][0:4] + list1[1][4:] #对list1进行切片 按要求来排顺序 把第一个元素和第二个元素加在一起。 b = list1[1][0:4] + list1[0][4:] with open("test.txt",'w') as fd: fd.write("{0}\n".format(a)) fd.write(b)2. 将上周五生成的dict3,排序后写入到文件dict.txt中,要求格式为
A 65
B 66
C 67
...
x 120
y 121
z 122
dict3 = { 'A': 65, 'B': 66, 'C': 67, 'D': 68, 'E': 69, 'F': 70, 'G': 71, 'H': 72, 'I': 73, 'J': 74, 'K': 75, 'L': 76, 'M': 77, 'N': 78, 'O': 79, 'P': 80, 'Q': 81, 'R': 82, 'S': 83, 'T': 84, 'U': 85, 'V': 86, 'W': 87, 'X': 88, 'Y': 89, 'Z': 90, 'a': 97, 'b': 98, 'c': 99, 'd': 100, 'e': 101, 'f': 102, 'g': 103, 'h': 104, 'i': 105, 'j': 106, 'k': 107, 'l': 108, 'm': 109, 'n': 110, 'o': 111, 'p': 112, 'q': 113, 'r': 114, 's': 115, 't': 116, 'u': 117, 'v': 118, 'w': 119, 'x': 120, 'y': 121, 'z': 122} dict3 = sorted(dict3.items(), key=lambda item: item[1]) with open("1.txt",'w') as fd: for i in dict3: a = i[0] b = str(i[1]) fd.write("{0} {1}\n".format(a,b))
相关文章推荐
- 复习 使用for、while循环遍历文件,数据类型转换
- 复习 使用for、while循环遍历文件,数据类型转换
- 使用for循环遍历文件、使用while循环遍历文件
- 使用while循环遍历文件
- Python中的用for,while循环遍历文件实例
- Effective JavaScript Item 49 对于数组遍历,优先使用for循环,而不是for..in循环
- java之图案拼接-for循环和while的使用
- 联合使用list() each() while循环遍历数组
- matlab 条件删除某元胞元素时不能使用for,而应该使用while进行遍历所有元胞
- 循环与递归--不使用if,while,for,do—while语句来输出所有比已知数N小的自然数
- shell脚本 for循环实现文件和目录遍历
- 循环语句的使用——while、do_while、for
- 不使用for,while循环打印99乘法表(使用递归)
- C#中循环语句:while、for、foreach的使用
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法
- for循环和while循环在使用continue时有所区别
- C#--第2周实验--任务四--编写一个控制台应用--分别使用for,while,do-while循环语句计算 n!
- shell for while 循环用来一行一行读取文件内容
- C语言中循环结构语句 for循环及while,do--while 的使用
- for循环小技巧,遍历数组的时候要使用恰当