#!/usr/bin/env python
# _*_ coding:utf-8 _*_
#.文件打开方式介绍
#.文件打开方式分为六种,以读的方式r;以写的方式w;以追加的方式a;以r+的方式;以w+的方式;以a+的方式,其中以读的方式打开为默认
#.r:以只读方式打开时,如果文件不存在会报错;r+方式同样是只能打开已存在的文件,如果文件不存在时同样报错
#.w:以写的方式打开时,如果文件不存在时会新建一个,但如果文件存在时以此方式打开原内容会清空;w+方式写入新内容时同样会清空原内容
#.a:以追加方式打开时,不能读取内容,读取时报错;a+方式打开时既能读也能写
#.总结:r:只读,不创建文件;r+:读写,不创建文件;
#. w:新建文件,只写;w+:新建文件,读写;
#. a:附加写方式打开文件,不可读;a+:附加读写方式打开文件
#.不可创建文件的方式有:r r+
#.可以创建文件的方式有:w w+ a a+
#.不可读取文件内容的方式有:w a
#.文件的的创建
#.方法1:手动在相应目录下创建
#.方法2:以可以创建文件的方式打开文件(系统会默认新建文件)
#.文件的打开
f = open('a.txt','r')
#.python3中只有这一种打开文件的方式,python2中可用file
#.open('文件名',‘打开方式’)
#.如果文件中有中文时,为防止出现乱码,需要加入参数encoding=utf8,如:open('a,txt','a+',encoding='utf8')
#.文件内容的写入
f.write('abcd')
f.writelines(['123','456','dfsdfdfdf'])
f.writelines(['123\n','456\n','dfsdfdfdf\n'])
#.注意:f.writelines()或者f.write()不能写入数字,只能写入字符串,即使要写入数字也必须是以字符串的方式写入
#.文件内容的读取
print(f.read())
print(f.readline())#从头开始读取一行信息,第二次执行时读取下一行信息
print(f.readlines())#返回一个list,每一行为一个元素
#读取第1行的前n个字符,print(f.readlines[n]),当n大于第一行字符数时打印第一行信息
#写入后读取时要注意指针的位置,读取内容是从指针开始,所以要把指针放到起始位置,用f.seek(0)
#.文件指针的移动
f.seek(n)#n=0时,即光标定位在最开始,n=1时即光标定位在第一个字符后
#.注意:如果有换行,即有\n字符,即换行=两个字符
#.文件中的for循环
for line in f:
print('第{i}行:{line}'.format(i=i,line=line))
i = i+1
#for循环文件对象时,每一行循环一次
#.文件的关闭
f.close()
#.不需要手动关文件,且常用打开文件的方法:
with open('exe.txt','a+') as f1, open('c.txt','a+') as f2: f2.writelines(['a\n','b\n','c\n','d\n','e\n']) f1.seek(0) f2.seek(0) for i in f1: print('exe.txt 文件每行的信息为:{i}'.format(i=i)) for m in f2: print('c.txt每行的信息为:%s' %m)
#.两种格式化字符如上
#.随机获取六位字符串的方法
import random,string
src=string.ascii_letters+string.ascii_uppercase+string.digits
a = random.sample(src,6)
print(a)#打印结果为['K', 'J', 'n', 'R', 'L', 'F'],即六个单字符组成的list
b=''.join(a)
print(b)#打印结果为CFJZrQ
#.练习:获取500条163邮箱的登录名,格式为六位字母字符@163.com,保存至文档中:
with open('usernames.txt','a+',encoding='utf8') as f:
f.seek( 0)
import random,string
src=string.ascii_letters+string.ascii_uppercase+string.digits
lis = []
for i in range(500):
user_name = random.sample(src, 6)
email_name = ( ''.join(user_name)+'@163.com\n')
f.write(email_name)
if email_name not in lis:
lis.append(email_name)
#f.write(email_name)
f.writelines(lis)
#.变量交换
# #python 数据交换
# a=1
# b=2
# b,a = a,b
# print(a,b)
# #另外一种方式:
# a = a+b
# b = a-b
# a = a-b
# print(a,b)