python-三元运算、文件操作

三元运算:

 

a = 6
b = 8
val = a if 12431234 < 5441234 else b
print(val)

文件操作:

f = open(file='C:/Users/Administrator.USER-20171109UR/Desktop/新建文本文档.txt',mode='r',encoding='gbk')
data = f.read()
print(data)
f.close()

这里的路径写法目前自己知道的有三种:

 1、linux路径方法

       'C:/Users/Administrator.USER-20171109UR/Desktop/新建文本文档.txt'

 2、双斜杠

      'C:\\Users\\Administrator.USER-20171109UR\\Desktop\\新建文本文档.txt'

 3、显式声明字符串不用转义

       r'C:\Users\Administrator.USER-20171109UR\Desktop\新建文本文档.txt'

mode = 'rb'以16进制来读取

f = open(file='C:\\Users\\Administrator.USER-20171109UR\\Desktop\\新建 Microsoft Office Word 文档.docx',mode='rb')
data = f.read()
print(data)
f.close()

1、装python工具库方法:eg:装chardet     用pip,python2 用pip2,python3用pip3,后面加 install  ,最后加工具名

     pip3 install chardet

2、查看文件编码类型:

import  chardet
f = open(file='新建文本文档.txt',mode='rb')
data = f.read()
f.close()
result = chardet.detect(data)
print(result)
print(data.decode('ascii'))#这是解码

结果显示:

3、如果文件内容多,运行内存不够,那就一次取一行

f = open('新建文本文档.txt','r',encoding='ascii')
for index,line in enumerate(f):
    print(index,line)
f.close()

4、print本身会换行

5.数据写入:

f=open('albert.txt','w',encoding='gbk')
f.write('杨昌龙')
f.close()
f=open('albert.txt','wb')
f.write('杨昌龙aaa'.encode('gbk'))
f.close()

6、追加:

f= open('albert.txt','ab')
f.write('\n杨昌龙'.encode('gbk'))
f.close()
 

7.文件读写:

f = open('albert.txt','r+',encoding='gb2312')
data = f.read()
print(data)

f.write('\n枯藤老树昏鸦')
f.write('\n小桥流水人家')
f.write("\n古道西风瘦马")
f.write("\n夕阳西下")
f.write('\n断肠人在天涯')
print('2',f.read())

f.close()
上面执行后,只是把2之前的打印出来,文件里,写进去了

8、文件写读:

f = open('albert.txt','w+',encoding='gb2312')
data = f.read()
print(data)

f.write('\n枯藤老树昏鸦')
f.write('\n小桥流水人家')
f.write("\n古道西风瘦马")
f.write("\n夕阳西下")
f.write('\n断肠人在天涯')
print('2',f.read())

f.close()
上面执行后,仅仅显示 2 ,文件中只有增加的

文件操作的其它功能
    def fileno(self, *args, **kwargs): # real signature unknown
        返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到

    def flush(self, *args, **kwargs): # real signature unknown
        把文件从内存buffer里强制刷新到硬盘

    def readable(self, *args, **kwargs): # real signature unknown
        判断是否可读

    def readline(self, *args, **kwargs): # real signature unknown
        只读一行,遇到\r or \n为止

    def seek(self, *args, **kwargs): # real signature unknown
        把操作文件的光标移到指定位置
        *注意seek的长度是按字节算的, 字符编码存每个字符所占的字节长度不一样。
        如“路飞学城” 用gbk存是2个字节一个字,用utf-8就是3个字节,因此以gbk打开时,seek(4) 就把光标切换到了“飞”和“学”两个字中间。
        但如果是utf8,seek(4)会导致,拿到了飞这个字的一部分字节,打印的话会报错,因为处理剩下的文本时发现用utf8处理不了了,因为编码对不上了。少了一个字节

    def seekable(self, *args, **kwargs): # real signature unknown
        判断文件是否可进行seek操作

    def tell(self, *args, **kwargs): # real signature unknown
        返回当前文件操作光标位置 

    def truncate(self, *args, **kwargs): # real signature unknown
        按指定长度截断文件
        *指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

    def writable(self, *args, **kwargs): # real signature unknown
        判断文件是否可写

flush()强行刷新到硬盘中


9.分行文件修改的:

f_name = "albert.txt"
f_new_name = "%s.new"%f_name
old_str = "杨昌龙"
new_str = "马致远"
f = open(f_name,"r",encoding="utf-8")
f_new = open(f_new_name,"w",encoding="utf-8")
for line in f:
    if old_str in line:
        line = line.replace(old_str,new_str)
    f_new.write(line)
f.close()
f_new.close()

修改用seek()光标定位置,再r+修改

f = open("要修改的文件utf8.txt",'r+',encoding="utf-8")

f.seek(6)

f.write("[要修改的内容]")

f.close()

总结:

打开文件的模式有:

    r,只读模式(默认)。

    w,只写模式。【不可读;不存在则创建;存在则删除内容;】

    a,追加模式。【可读;  不存在则创建;存在则只追加内容;】

    "+"表示可以同时读写某个文件

    r+,可读写文件。【可读;可写;可追加】

    w+,写读

    a+,同a

    "U"表示在读取时,可以将 \r\n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)

    rU

    r+U

    "b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理    二进制文件时需标注)

    rb

    wb

    ab

经常用到一下:对文件内容进行修改

f = open('information.txt','r',encoding='utf-8')
f_new = open('information_bak.txt','w',encoding='utf-8')

old_str = input('请输入修改前的内容:')
new_str = input('请输入修改后的内容:')

for line in f:
    if old_str in line:
        line = line.replace(old_str,new_str)
    f_new.write(line)
f.close()
f_new.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值