python文件操作

涉及文本操作就会涉及到编码解码问题,编码方式的历史大致为ASCII ->gb2312->unicode->utf-8,期间具体详细信息可以百度
来个编码解码的小例子先:

bytes = '张三'.encode('GBK')
print(bytes)
print(type(bytes))
byte_utf8 = "张三".encode('utf-8')
print(byte_utf8)
string = bytes.decode('GBK')
print(string)
string = byte_utf8.decode("GBK")
print(string)

b'\xd5\xc5\xc8\xfd'
<class 'bytes'>
b'\xe5\xbc\xa0\xe4\xb8\x89'
张三
寮犱笁

可以发现,编码解码格式不一致可能会出现乱码,encode表示编码

  • 文件操作流程
    1.打开文件,得到文件句柄并赋值给一个变量
    2.通过句柄对文件进行操作
    3.关闭文件

简单格式如下:

f=open('test.txt',encoding='utf-8')   #打开文件
data=f.read()            #文件操作
print(data)
f.close()          #关闭文件
  • open()函数的具体用法:
    open函数最常用的使用方法如下:文件句柄 = open('文件路径', '模式',编码方式)。
  1. 文件路径
    文件路径:主要有两种,一种是使用相对路径,想上面的例子就是使用相对路径。另外一种就是绝对路径,像' C:/Users/shu/Desktop/python/test.txt'
  2. 打开模式
  • 关闭文件
    不要小看这一步,因为我们读取文件是把文科读取到内存中的,如果我们没关闭它,它就会一直占用系统资源,而且还可能导致其他不安全隐患。还有一种方法可以让我们不用去特意关注关闭文件。那就是 with open()

  • 打开文件的类型介绍
    可以打开文本文件和二进制文件,文本文件本质上存储时,也是二进制文件。但可以用文本编辑器查看。二进制文件,无法通过文本编辑器查看


  • 读文件三种方法

  1. read()
    特点是:读取整个文件,将文件内容放到一个字符串变量中。
    劣势是:如果文件非常大,尤其是大于内存时,无法使用read()方法。
    实例如下:
file = open('兼职模特联系方式.txt', 'r')  # 创建的这个文件,也是一个可迭代对象

try:
    text = file.read()  # 结果为str类型
    print(type(text))
    print(text)
finally:
    file.close()
"""
<class 'str'>
吴迪 177 70 13888888
王思 170 50 13988888
白雪 167 48 13324434
黄蓉 166 46 13828382
"""
>>> file = open('兼职模特联系方式.txt', 'r')
>>> a = file.read()
>>> a
'吴迪 177 70 13888888\n王思 170 50 13988888\n白雪 167 48 13324434\n黄蓉 166 46 13828382'

read()直接读取字节到字符串中,包括后面的换行符

  1. readline()方法
    特点:readline()方法每次读取一行;返回的是一个字符串对象,保持当前行的内存
    缺点:比readlines慢得多
file = open('兼职模特联系方式.txt', 'r')

try:
    while True:
        text_line = file.readline()
        if text_line:
            print(type(text_line), text_line)
        else:
            break
finally:
    file.close()
"""
<class 'str'> 吴迪 177 70 13888888

<class 'str'> 王思 170 50 13988888

<class 'str'> 白雪 167 48 13324434

<class 'str'> 黄蓉 166 46 13828382
"""
>>> file = open('兼职模特联系方式.txt', 'r')
>>> a = file.readline()
>>> a
'吴迪 177 70 13888888\n'

readline() 读取整行,包括行结束符,并作为字符串返回

  1. readlines()方法
    特点:一次性读取整个文件;自动将文件内容分析成一个行的列表。
    缺点:若一个文件特别大,name一次性将文件都读入内存,容易奔溃
file = open('兼职模特联系方式.txt', 'r')

try:
    text_lines = file.readlines()
    print(type(text_lines), text_lines)
    for line in text_lines:
        print(type(line), line)
finally:
    file.close()
"""
<class 'list'> ['吴迪 177 70 13888888\n', '王思 170 50 13988888\n', '白雪 167 48 13324434\n', '黄蓉 166 46 13828382']
<class 'str'> 吴迪 177 70 13888888

<class 'str'> 王思 170 50 13988888

<class 'str'> 白雪 167 48 13324434

<class 'str'> 黄蓉 166 46 13828382
"""
>>> file = open('兼职模特联系方式.txt', 'r')
>>> a = file.readlines()
>>> a
['吴迪 177 70 13888888\n', '王思 170 50 13988888\n', '白雪 167 48 13324434\n', '黄蓉 166 46 13828382']

以上部分内容摘自博客:https://www.cnblogs.com/xiugeng/p/8635862.html

  • 文件写方法:write、writelines
    write和writelines的区别
    1 write()需要传入一个字符串做为参数,否则会报错
    2 writelines()既可以传入字符串又可以传入一个字符序列,并将该字符序列写入文件
    注意 :writelines必须传入的是字符序列,不能是数字序列
    如:list_1023 = [1,2,3,4,5]
    报错:TypeError: write() argument must be str, not list
    其余用法很多类似于读操作

附上文件操作的作业:

# 作业1:创建文件:data.txt,一共10000行,每行存放一个1-100间的整数。
# 作业2:找出文件中数字出现最多的十个数字。
# 写入到文件mostNum.txt中。可用collections.counter
from random import randint
from collections import Counter
count_list = Counter(['b', 'a', 'a', 'b', 'a', 'c', 'b', 'b'])
print(count_list)

count_tuple = Counter((1,4,3,4,1,3,2,2,1))
print(count_tuple)

with open('data.txt', 'w') as f:
    for i in range(10000):
        f.write(str(randint(1,101)) + '\n')

with open('data.txt', 'r') as f:
    content = []
    line = f.readline()
    while line:
        content.append(line[:-1])
        line = f.readline()
    count_list = Counter(content)
    most_count_list = count_list.most_common(10)

    print(most_count_list)
    for i in range(10):
        print(most_count_list[i][0])

Counter({'b': 4, 'a': 3, 'c': 1})
Counter({1: 3, 4: 2, 3: 2, 2: 2})
[('86', 124), ('48', 122), ('72', 121), ('98', 121), ('5', 115), ('24', 115), ('68', 114), ('13', 114), ('93', 114), ('27', 112)]
86
48
72
98
5
24
68
13
93
27

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容

  • Python文件操作 准备工作: 1) 使用python来读取文件是非常简单的操作,我们使用open()函数来打开...
    小学弟_阅读 510评论 0 0
  • 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概...
    __元昊__阅读 195评论 0 1
  • 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概...
    极课编程阅读 438评论 0 5
  • 一.文件IO常用操作 二.open open(file, mode='r', buffering=-1, enco...
    秋幻旎苏阅读 290评论 0 0
  • 杨贵云焦点43期坚持原创分享第72天平顶山 今天是周四公益课,由吕素英老师主讲。聚焦现在和未来---做最好的自己。...
    舒静心阅读 345评论 0 0