【Python】文件读写(CSV、Excel)

一、CSV文件

1 读csv文件

1.1 以数组方式读文件

def listReader():

    with open("user.csv", encoding="UTF-8") as csvFile:
        # 读文件
        csvData = csv.reader(csvFile)

        # 数据集合
        print(list(csvData))

        # 遍历数据对象
        for data in csvData:
            # csvData.line_num:每条数据的行号
            print("%s = " % csvData.line_num, data)

1.2 以字典方式读文件

def dictReader():
    with open("user.csv", encoding="UTF-8") as csvFile:
        # 以字典方式读文件
        csvData = csv.DictReader(csvFile)
        
        for data in csvData:
            # print(row)
            print(row['name'],row['age'])

2 写csv文件

2.1 写入行

方式一:直接写入
def rowWrite01():
    # 打开文件时加入参数newline = '', 可避免输出时每行之间多空一行
    with open('test.csv', 'w', newline='') as csvFile:
        # 写文件
        file = csv.writer(csvFile)

        file.writerow(['Name', 'Age', 'City'])
        file.writerow(['luck', '18', 'BeiJing'])
        file.writerow(['Jucy', '20', 'ShangHai'])
方式二:使用delimiter分隔符
def rowWrite02():
    with open('test.csv', 'w', newline='') as csvFile:
        # delimiter是分隔符,在write中,可以用分隔符更改每行之间的逗号
        file = csv.writer(csvFile, delimiter='\t')

        file.writerow(['Name', 'Age', 'City'])
        file.writerow(['luck', '18', 'BeiJing'])
        file.writerow(['Jucy', '20', 'Shan,gHai'])

2.2 使用字典写入

方式一:直接写入
def dictRowWrite():
    with open('test.csv', 'w', newline='') as csvFile:
        # 标题
        fields = ['Name', 'Age', 'City']

        # fieldnames:设置csv文件标题
        file = csv.DictWriter(csvFile, fieldnames=fields)

        # 写入标题
        file.writeheader()
        file.writerow({'Name': 'luck', 'Age': '19', 'City': 'BeiJing'})
        file.writerow({'Name': 'Jucy', 'Age': '21', 'City': 'ShangHai'})
方式二:循环写入
def dictWrite():
    dictList = [{'Name': 'luck', 'Age': '19', 'City': 'BeiJing'},
                {'Name': 'Jucy', 'Age': '21', 'City': 'ShangHai'}]
    with open('test.csv', 'w', newline='') as csvFile:
        fields = ['Name', 'Age', 'City']

        # fieldnames:设置csv文件标题
        file = csv.DictWriter(csvFile, fieldnames=fields)

        # 写入标题
        file.writeheader()
        for row in dictList:
            file.writerow(row)

二、Excel文件

1 下载读Excel所需要的库文件xlrd2

pip install xlrd2

2 读Excel文件

# 引入Excel库的xlrd
import xlrd2

def excelReader(sheet):
    # 略去标题行,从第2行开始循环
    for row in range(1, sheet.nrows):
        data = {'id': '', 'name': '', 'age': '',
                'sex': '', 'deleted': '', 'version': ''}

        # sheet.cell_value(row, 0):取第row行,第0列数据
        data['id'] = sheet.cell_value(row, 0)
        data['name'] = sheet.cell_value(row, 1)
        data['age'] = sheet.cell_value(row, 2)
        data['sex'] = sheet.cell_value(row, 3)
        data['deleted'] = sheet.cell_value(row, 4)
        data['version'] = sheet.cell_value(row, 5)

if __name__ == '__main__':
    # 加载Excel文件
    workBook = xlrd2.open_workbook('user.xlsx')

    # 获取第一个sheet名
    sheetName = workBook.sheets()[0]

    excelReader(sheetName)
  • 常用的一些方法
# 引入库
import xlrd2

# 打开文件并返回一个工作蒲对象。open_workbook可以点进去看看函数里面的参数的含义之类的,很详细,英语不好的可以百度翻译,翻译出来的结果差不多。
wb = xlrd2.open_workbook("Excel的路径")

# 获取excel里面的sheet的数量
sheet_num = wb.nsheets

# 获取到Excel里面所有的sheet的名称列表,即使没有sheet也能用。
sheet_names = wb.sheet_names()

# 通过索引的方式获取到某一个sheet,现在是获取的第一个sheet页,也可以通过sheet的名称进行获取,sheet_by_name('sheet名称')
sheet = wb.sheet_by_index(0)

# 获取sheet页的行数,一共有几行
rows = sheet.nrows

# 获取sheet页的列数,一共有几列
columns = sheet.ncols

# 获取第一行的数据
# 返回给定的行数的单元格数据进行切片
row_data = sheet.row_values(0)

# 获取第二列的数据
col_data = sheet.col_values(1)

# 取第row行,第col列数据
row_col_data = sheet.cell_value(row, col)

# 获取单元格的数据
# 同样是通过索引的方式,cell(0,1)获取到的是第一行第二列的单元格数据
one_data = sheet.cell(row_index, col_index)

# 获取单元格的值
cell_value = one_data.value

# 获取单元格的类型,在xlrd2中,单元格的数据类型有6种,
cell_type = one_data.ctype

0 -- 空(empty)
1 -- 字符串(string)
2 -- 数字(number)
3 -- date(日期)
4 -- boolean(布尔值)
5 -- error(错误)

你可能感兴趣的:(Python,python)