八年级上册¶

第一单元 用计算机程序解决问题¶

第5节 常见文件的读写¶

一.TXT文件的读写¶

In [2]:
# 2.写入TXT文件
# 学生体质报告字串写入文件
myFile = open('report.txt', 'w', encoding='UTF-8')
myFile.write('学生体质健康调查报告')
myFile.close()
print('文件写入成功!')
文件写入成功!
In [3]:
# 3.读取TXT文件
# 学生体质报告字串读取
myFile = open('report.txt', 'r', encoding='UTF-8')
print(myFile.read())
myFile.close()
学生体质健康调查报告
In [4]:
with open('report.txt', 'w') as myFile:
    myFile.write('调查统计报告')
print('文件写入成功!')
文件写入成功!

实践活动:编写调查报告自动生成程序¶

  • 报告一共有五部分,分别放在“近视四大诱因.txt、引言.txt、五大举措.txt、调查数据分析.txt”五个文件中,按一定顺序合成一个总报告。
In [13]:
# 参考程序
lst = ['引言.txt','调查数据分析.txt','近视四大诱因.txt','五大举措.txt']
file = open('调查报告.txt', 'w', encoding='UTF-8')
for filename in lst:
    f = open(filename, 'r', encoding='UTF-8')
    file.write(f.read())
    f.close()
file.close()
print('报告生成完毕!')
报告生成完毕!

二、CSV文件及读写¶

In [16]:
# 3. 写入CSV文件
# 导入CSV模块
import csv
# 用列表定义CSV文件的表头字段信息
headers = ['number','age','sex','Q1','Q2','Q3']
# 用列表定义CSV文件各条记录中的数据
rows = [('1','14','男','A','A','C'),
        ('2','14','女','B','B','D'),
        ('3','13','男','A','A','C'),
        ('4','14','男','C','A','C'),
        ('5','14','女','A','A','D')]
# 在with语句下,用open函数以只写模式打开CSV文件并创建文件对象实例
# myFile,其中“newline=''参数是用来自动识别并解析CSV文件中各种换
# 行符。
with open('investigate.csv','w', newline='') as myFile:
    # 为myFile创建一个writer类的对象实例
    myWriter = csv.writer(myFile)
    # 在writer类对象实例中单行写入表头信息
    myWriter.writerow(headers)
    # 在writer类对象实例中写入多行的数据记录
    myWriter.writerows(rows)
# 提示用户写入成功
print('文件写入成功!')
文件写入成功!
In [17]:
# 3.写入CSV文件-DictWriter类实现
# 导入CSV模块
import csv
# 用列表定义CSV文件的表头字段信息
header = ['number','age','sex','Q1','Q2','Q3']
# 用字典定义CSV文件中各条记录数据
dict1 = {'number':'1','age':'14','sex':'男','Q1':'A','Q2':'A','Q3':'C'}
dict2 = {'number':'2','age':'14','sex':'女','Q1':'B','Q2':'B','Q3':'D'}
dict3 = {'number':'3','age':'13','sex':'男','Q1':'A','Q2':'A','Q3':'C'}
dict4 = {'number':'4','age':'14','sex':'男','Q1':'C','Q2':'A','Q3':'C'}
dict5 = {'number':'5','age':'14','sex':'女','Q1':'A','Q2':'A','Q3':'D'}
# 在with语句下,用open函数以只写模式打开CSV文件,并创建文件对象实例myFile
with open('investigate.csv', 'w', newline='') as myFile:
    # 创建一个DictWriter类的对象实例
    myDictwriter = csv.DictWriter(myFile, fieldnames=header)
    # 写入表头字段信息
    myDictwriter.writeheader()
    # writerow每次写入一行
    myDictwriter.writerow(dict1)
    # writerows多行写入
    myDictwriter.writerows([dict2, dict3, dict4, dict5])
#提示用户写入成功
print('文件写入成功!')
文件写入成功!
In [21]:
# 4.读取CSV文件
#导入CSV模块
import csv
# 用open函数以只读模式打开CSV文件,并创建文件对象实例myFile
with open ('investigate.csv', 'r') as myFile :
    # 创建一个reader类的对象实例
    csvReader = csv.reader(myFile)
    # 以列表形式遍历输出reader类对象实例中所有数据
    for row in csvReader :
        print(row)
['number', 'age', 'sex', 'Q1', 'Q2', 'Q3']
['1', '14', '男', 'A', 'A', 'C']
['2', '14', '女', 'B', 'B', 'D']
['3', '13', '男', 'A', 'A', 'C']
['4', '14', '男', 'C', 'A', 'C']
['5', '14', '女', 'A', 'A', 'D']
In [20]:
# 4.读取CSV文件 - DictReader方法
# 导入CSV模块
import csv
# 用open函数以只读模式打开CSV文件,并创建文件对象实例myFile
with open ('investigate.csv', 'r') as myFile :
    # 创建一个DictReader类的对象实例
    dictReader = csv.DictReader(myFile)
    # 遍历输出DictReader类对象实例中所有字典数据
    for row in dictReader:
        print(row)
{'number': '1', 'age': '14', 'sex': '男', 'Q1': 'A', 'Q2': 'A', 'Q3': 'C'}
{'number': '2', 'age': '14', 'sex': '女', 'Q1': 'B', 'Q2': 'B', 'Q3': 'D'}
{'number': '3', 'age': '13', 'sex': '男', 'Q1': 'A', 'Q2': 'A', 'Q3': 'C'}
{'number': '4', 'age': '14', 'sex': '男', 'Q1': 'C', 'Q2': 'A', 'Q3': 'C'}
{'number': '5', 'age': '14', 'sex': '女', 'Q1': 'A', 'Q2': 'A', 'Q3': 'D'}

实践活动:合成CSV文件¶

  • 文件夹中已有 investigate1.csv - investigate9.csv 共9个文件,合成 investigate0.csv
In [27]:
#  本代码只用于教师生成9个模拟数据
import random
import csv
def one(n):
    dict1 = { }
    dict1['number'] = str(n)
    dict1['age'] = random.choice([13,14,15,16])
    dict1['sex'] = random.choice(['男', '女'])
    dict1['Q1'] = random.choice(['A','B','C', 'D'])
    dict1['Q2'] = random.choice(['A','B','C', 'D'])
    dict1['Q3'] = random.choice(['A','B','C', 'D'])
    return dict1
def much(n1, n2):
    lst = []
    for i in range(n1, n2+1):
        lst.append(one(i))
    return lst
def oneFile(filename, lst):
    # 用列表定义CSV文件的表头字段信息
    header = ['number','age','sex','Q1','Q2','Q3']
    # 在with语句下,用open函数以只写模式打开CSV文件,并创建文件对象实例myFile
    with open(filename, 'w', newline='') as myFile:
        # 创建一个DictWriter类的对象实例
        myDictwriter = csv.DictWriter(myFile, fieldnames=header)
        # 写入表头字段信息
        myDictwriter.writeheader()
        # writerow每次写入多行
        myDictwriter.writerows(lst)
    #提示用户写入成功
    print('{}文件生成成功!'.format(filename))
myList = [('investigate{}.csv'.format(i),((i-1)*100+1, i*100+1)) for i in range(1,10)]
for item in myList:
    oneFile(item[0], much(item[1][0], item[1][1]))
investigate1.csv文件生成成功!
investigate2.csv文件生成成功!
investigate3.csv文件生成成功!
investigate4.csv文件生成成功!
investigate5.csv文件生成成功!
investigate6.csv文件生成成功!
investigate7.csv文件生成成功!
investigate8.csv文件生成成功!
investigate9.csv文件生成成功!
In [29]:
# 参考程序
import csv
# 打开写入文件并写入表头
header = ['number','age','sex','Q1','Q2','Q3']
file = open('investigate0.csv', 'w', newline='')
myDictwriter = csv.DictWriter(file, fieldnames=header)
myDictwriter.writeheader()
# 读取每个文件并写入
for i in range(1, 10):
    with open ('investigate{}.csv'.format(i), 'r') as myFile :
        dictReader = csv.DictReader(myFile)
        myDictwriter.writerows(dictReader)
        print('investigate{}.csv文件读取并写入成功!'.format(i))
# 关闭写入文件
file.close()
print('合并完成!')
investigate1.csv文件读取并写入成功!
investigate2.csv文件读取并写入成功!
investigate3.csv文件读取并写入成功!
investigate4.csv文件读取并写入成功!
investigate5.csv文件读取并写入成功!
investigate6.csv文件读取并写入成功!
investigate7.csv文件读取并写入成功!
investigate8.csv文件读取并写入成功!
investigate9.csv文件读取并写入成功!
合并完成!
In [ ]: