• Python文件操作(读写CSV)


    一、文件的基本操作

    2.1 文件操作步骤

    1. 打开文件

    2. 读写等操作

    3. 关闭文件

    注意:可以只打开和关闭文件,不进行任何读写操作

    2.1.1 打开

    在python,使⽤用open函数,可以打开⼀一个已经存在的文件,或者创建一个新⽂文件,语法如下:

    open(name, mode)
    

    name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
    mode:设置打开文件的模式(访问模式):只读、写入、追加等。

    2.1.1.1 打开文件模式

    image-20200915161357023

    2.1.1.2 快速体验

    f = open('test.txt', 'w')
    

    注意:此时的 f 是 open 函数的⽂文件对象

    2.1.2 文件对象方法

    2.1.2.1 写

    • 语法
    对象对象.write('内容') 
    
    • 体验
    # 1. 打开⽂文件
    f = open('test.txt', 'w')
    # 2.⽂文件写⼊入
    f.write('hello world')
    # 3. 关闭⽂文件
    f.close()
    

    注意:

    1. w 和 a 模式:如果文件不存在则创建该⽂件;如果文件存在, w 模式先清空再写入, a 模式直接末尾追加。
    2. r 模式:如果文件不存在则报错

    2.1.2.2 读

    • read()
    ⽂文件对象.read(num)
    

    num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

    • readlines()

    readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

    f = open('test.txt')
    content = f.readlines()
    # ['hello world
    ', 'abcdefg
    ', 'aaa
    ', 'bbb
    ', 'ccc']
    print(content)
    # 关闭⽂文件
    f.close()
    
    • readline()

    readline()⼀次读取⼀行内容。

    f = open('test.txt')
    content = f.readline()
    print(f'第⼀行:{content}')
    content = f.readline()
    print(f'第⼆行:{content}')
    # 关闭⽂文件
    f.close()
    

    image-20200915162820665

    2.1.2.3 seek()

    作⽤:用来移动文件指针。
    语法如下:

    文件对象.seek(偏移量, 起始位置)
    

    起始位置:
    0:文件开头
    1:当前位置
    2:文件结尾

    2.1.3 关闭

    文件对象.close() 
    

    file对象常用函数

    image-20200915183014795

    open 与 with open

    file = open('test.txt','w')
    file.write('123')
    file.close()
    

    等同于

    with open('test.txt','w') as file:
    file.write('123')
    

    二、文件读写CSV

    什么是CSV?
    CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。
    “CSV”并不是一种单一的、定义明确的格式。因此在实践中,术语“CSV”泛指具有以下特征的任何文件:
    1、纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;由记录组成
    2、每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符
    3、有时分隔符可以包括可选的空格)
    4、每条记录都有同样的字段序列

    1.创建一个CSV文件

    with open('test.csv','w')as file:
        file.write('id,url,name')
        file.write('
    ')
        file.write('1,http://www.baidu.com,baidu')
        file.write('
    ')
        file.write('2,http://taobao.com,taobao')
        file.write('
    ')
        file.write('3,http://jd.com,jd')
    

    image-20200915183721188

    2.读取CSV文件

    #导入模块
    import csv
    #打开文件,用with打开可以不用去特意关闭file了
    with open('test.csv','r')as csvfile:
        #读取csv文件,返回的是迭代类型
        read=csv.reader(csvfile)
        for i in read:
            print(i)
    

    3.读取CSV指定行内容

    import csv
    with open("test.csv","r") as csvfile:
        read = csv.reader(csvfile)
        for index,value in enumerate(read):
        # 比如读取第二行,行数从0开始记,所以第二行 用 index 进行判断
        # 或者读取 m~n 行 if (m<=index<=n)
            if(index==1):
                print(value)
    

    4.写入CSV文件

    import csv
    # 1.打开文件 as 称它为 变量xxx, 若不存在该文件,则创建
    with open('newcsv.csv','w',encoding='utf-8') as newfile:
        #存储csv,读取的文件writer
        writer=csv.writer(newfile)
        #写入一行
        writer.writerow(['序号','网址','名称'])
        #写入多行
        lists=[
            [1,'www.baidu.com','百度'],
            [2,'www.qq.com','腾讯'],
            [3,'www.jingdong.com','京东']
        ]
        writer.writerow(lists)
    

    5.解决写入空行的问题(方法一)

    import csv
    # 在 open( ) 的参数内加上 newline=''
    with open('newcsv.csv','w',encoding='utf-8',newline='')
    as newfile:
        # 存储csv,读取的文件writer
        writer=csv.writer(newfile)
        # 写入一行
        writer.writerow(['序号','网址','名称'])
        # 写入多行
        list=[
            [1,'www.baidu.com','百度'],
            [2,'www.qq.com','腾讯'],
            [3,'www.jingdong.com','京东']
        ]
        writer.writerows(lists)
    

    6.解决写入的空行问题(方法二)

    import csv
    import codecs
    with codecs.open('newcsv.csv','w','utf-8') as newfile:
    # 存储 csv、读取的文件writer
        writer = csv.writer(newfile)
    #写入一行
        writer.writerow(['序号','网址','名称'])
    # 写入多行
        lists = [
            [1,'www.baidu.com','百度'],
            [2,'www.qq.com','腾讯'],
            [3,'www.jingodng.com','京东']
        ]
        writer.writerows(lists)
    
    

    7.追加内容到CSV文件

    import csv
    # 注意 open( )第二个参数为 'a' 的话,是追加append 的意思
    with open('newcsv.csv','a',encoding='utf-8',newline='')as csvfile:
        mywriter=csv.writer(csvfile)
        mywriter.writerow(['江苏省|淮安市|清江浦区'])
        mywriter.writerow(['山东省|青岛市|黄岛区'])
        mywriter.writerow(['湖南省|怀化市|鹤城区'])
    

    8.自定义读取CSV文件

    csv文件有时候并不是分隔符只是逗号,还有可能是其他符号,那么我们该如何读取其他分隔符的csv文件呢?
    现在我们想把前四行正常读取,5-7行的按照省、市、区的列表读取,该如何读取呢
    为csv注册一个新的读取规则:
    语法:

    csv.register_dialect ( '规则名称' , delimiter = '分隔符',quoting = csv.QUOTE_ALL)

    注销规则语法: csv.unregister_dialect()

  • 相关阅读:
    moco-globalsettings
    moco-简述
    stub和mock
    软件测试工作经验分享
    类、对象、方法、属性和实例变量
    你真的对 parseInt有足够的了解吗?
    PhoneGap开发环境搭建(记录一下,仅仅针对Android)
    360 前端面试题
    前端WEB开发工程师面试题-基础部分
    有意思的For循环
  • 原文地址:https://www.cnblogs.com/James-221/p/13674969.html
Copyright © 2020-2023  润新知