头歌——数据分析与实践-基于Python语言的文件与文件夹管理-文本 文件处理-利用csv模块进行csv文件的读写操作

【头歌】——数据分析与实践-基于Python语言的文件与文件夹管理-文本 文件处理-利用csv模块进行csv文件的读写操作

    • 基于Python语言的文件与文件夹管理
      • 第1关 创建子文件夹
      • 第2关 删除带有只读属性的文件
      • 第3关 批量复制文件夹中的所有文件
    • 文件处理
      • 第1关 读取宋词文件,根据词人建立多个文件
      • 第2关 读取宋词文件,并根据词人建立多个文件夹
      • 第3关 读取宋词文件,建立多个词人文件夹,为每首词在文件夹下建立文本文件
      • 第4关 文件的统计
      • 第5关 文件的移动
    • 利用csv模块进行csv文件的读写操作
      • 第1关 csv文件的读操作
      • 第2关 csv文件的写操作

基于Python语言的文件与文件夹管理

第1关 创建子文件夹

import os

def mkDir():
    # 创建名为 'dst' 的文件夹
    os.makedirs('dst', exist_ok=True)

# 如果文件被直接运行,执行测试代码
if __name__ == "__main__":
    mkDir()
    
    # 判断当前文件夹中是否存在文件夹 'dst'
    if os.path.exists('dst') and os.path.isdir('dst'):
        print('mkdir success')
    else:
        print('dst does not exist')

第2关 删除带有只读属性的文件

import os
import sys

def removeFile():
    # 删除 'src/removeme.txt' 文件
    try:
        os.remove('src/removeme.txt')
        print('remove success')
    except FileNotFoundError:
        print('remove success')
        sys.exit()
# 如果文件被直接运行,执行测试代码
if __name__ == "__main__":
    removeFile()

第3关 批量复制文件夹中的所有文件

未通过本题,如果您通过了本题欢迎补充到评论区,有时间我会整理进来






文件处理

第1关 读取宋词文件,根据词人建立多个文件

import shutil
import os
if os.path.exists("wjcl/src/step3/cr"):
    shutil.rmtree("wjcl/src/step3/cr")
os.mkdir("wjcl/src/step3/cr")
f1=open("wjcl/src/step1/宋词.txt",'r')
#代码开始
#os.chdir("wjcl/src/step3/cr")
for line in f1.readlines():#逐行读取文件
    k=0
    if " "in line:
        k=1
        pos=line.find(" ")#pos为冒号所在位置
        pos1=line.find("
")
        xm=line[pos+1:pos1]#截取姓名
        if xm !="": f2=open('wjcl/src/step3/cr/'+xm+".txt",'a+')#以追加的方式打开文件xm.txt(不存在就新建,存在就打开)
        if len(line.strip("
").strip())>0:
          f2.write(line)#将读出的内容写入文件
    if len(line.strip("
").strip()) > 0 and k !=1:
        f2.write(line)  # 将读出的内容写入文件




#代码结束
f1.close()
f2.close()

第2关 读取宋词文件,并根据词人建立多个文件夹

import os
import shutil
if os.path.exists("wjcl/src/step4/sccr"):
    shutil.rmtree("wjcl/src/step4/sccr")
os.mkdir("wjcl/src/step4/sccr")
f1=open("wjcl/src/step1/宋词.txt",'r')
#代码开始
for line in f1.readlines():#逐行读取文件
    k=0
    if " "in line:
        k=1
        pos=line.find(" ")#pos为冒号所在位置
        pos1=line.find("
")
        xm=line[pos+1:pos1]#截取姓名
        if not os.path.exists("wjcl/src/step4/sccr/"+xm):os.mkdir("wjcl/src/step4/sccr/"+xm)#以追加的方式打开文件xm.txt(不存在就新建,存在就打开)
f1.close()

#代码结束
                

第3关 读取宋词文件,建立多个词人文件夹,为每首词在文件夹下建立文本文件

import os
import shutil
if  os.path.exists("wjcl/src/step5/cr"):
    shutil.rmtree("wjcl/src/step5/cr")
os.mkdir("wjcl/src/step5/cr")
f1=open("wjcl/src/step1/宋词.txt",'r')
#代码开始
list_str = f1.readlines()
temp_str = ''
name = ''
for s in list_str:
    if s.find(' ') != -1:
        if len(temp_str) == 0:
            temp_str += s
        else:
            if name == '':
                name = s
            file_path = 'wjcl/src/step5/cr/' + name[name.find(' ') + 1:-1]
            if not os.path.exists(file_path):
                os.mkdir(file_path)
            title_path = file_path + '/' + name[0:name.find(' ')] + '.txt'
            f2 = open(title_path, 'a+', encoding='utf-8')
            f2.write(temp_str)
            f2.close()
            temp_str = s
        name = s
    else:
        temp_str += s
file_path = 'wjcl/src/step5/cr/' + name[name.find(' ') + 1:-1]
if not os.path.exists(file_path):
    os.mkdir(file_path)
title_path = file_path + '/' + name[0:name.find(' ')] + '.txt'
f2 = open(title_path, 'a+', encoding='utf-8')
f2.write(temp_str)
f2.close()
f1.close()
#代码结束

第4关 文件的统计

import os
wjzd={}
wjsize={}
lj="wjcl/src/test"
#代码开始

def get_size_type(f_path):
    global lj
    files_name = os.listdir(f_path)
    for name in files_name:
        file_path = os.path.join(f_path, name)
        ty = str(os.path.splitext(file_path)[1]).strip('.')
        if os.path.isdir(file_path):
            get_size_type(file_path)
        if not ty or ty == 'gitkeep':
            continue
        else:
            wjzd.setdefault(ty, 0)
            wjzd[ty] += 1
            wjsize.setdefault(ty, 0)
            wjsize[ty] += os.path.getsize(file_path)
get_size_type(lj)
ans = ['txt', 'mp3', 'jpg', 'pptx']

#代码结束
for x in ans:
    print("文件类型{}文件数{}文件大小{:.2f}KB".format(x,wjzd[x],wjsize[x]/1024))

第5关 文件的移动

import os
import shutil
wj={"图片":".jpeg.jpg.png.jfif","文档":".txt.docx.pdf","音乐":".mp3.wav","影像":".mp4.flv"}
lj1="wjcl/src/test2"
lj="wjcl/src/test3"
if os.path.exists(lj):
    shutil.rmtree(lj)  
shutil.copytree(lj1,lj)
#代码开始
def move_file(path):
    if not os.path.exists(lj + path):
            os.mkdir(lj + path)
    shutil.move(file_path, lj + path)
files = os.listdir(lj)
for name in files:
    file_path = os.path.join(lj, name)
    ty = str(os.path.splitext(name)[1])
    if ty == '.gitkeep' or name == '.gitkeep':
        continue
    if wj['图片'].find(ty) != -1:
        move_file('/img')
    elif wj['文档'].find(ty) != -1:
        move_file('/idoc')
    elif wj['音乐'].find(ty) != -1:
        move_file('/music')
    elif wj['影像'].find(ty) != -1:
        move_file('/video')
#代码结束
#for x in os.listdir(lj):
#   if x!=".gitkeep":
#        print(os.listdir(lj+"/"+x))
l = [['青城山.png', '杜甫草堂.png', '春熙路图集3.jfif', 'ifs大熊猫.jpg', '春熙路图集2.jpeg', '基地1.jpg', '春熙路图集1.jfif'],
['学院设置.docx', '昆明.docx', '考题四.pdf', '琵琶行并序.txt', '考题一.pdf'],
['pq.flv', '七彩丹霞视频.mp4', '云南十八怪_.mp4'],
['花儿尕恋手令.mp3', 'add.wav', 'score.wav', '山歌好比春江水.mp3']]
for n in l:
    print(n)
#代码结束




利用csv模块进行csv文件的读写操作

第1关 csv文件的读操作

import csv    #导入csv模块
   
########## Begin ##########
contents=[]
filename='project/iris.csv'
csv_file=open(filename,mode='r',encoding='utf-8')
reader=csv.reader(csv_file)
for item in reader:
    contents.append(item)                            #打开数据集的文件,file是相应的文件句柄
                            #读取数据,把数据放在contents中
########## End ##########


for line in contents:    #打印文件内容
    ########## Begin ##########
    print(line)
    ########## End ##########
line_num=len(contents)
print(line_num)

第2关 csv文件的写操作

import csv


########## Begin ##########
filename='project/students.csv'
csvfile2=open(filename,'w',newline='')
writer2=csv.writer(csvfile2)                            #打开文件,newline是否换行的参数
                            #如果不指定newline='',则每写入一行将有一空行被写入

########## End ##########

row=["序号","学号","姓名","性别","学院"]
rows=[[1,"1409090312","张雨","女","计算机学院"],
      [2,"1409103265","陈敢","男","理学院"],
      [3,"1509111023","李家祥","女","计算机学院"],
      [4,"1409090311","邓贵","男","理学院"],
     ]

########## Begin ##########
writer2.writerow(row)
writer2.writerows(rows)
row1=['1',"1409090312","张雨","女","计算机学院"]
row2=['2',"1409103265","陈敢","男","理学院"]
row3= ['3',"1509111023","李家祥","女","计算机学院"]
row4=['4',"1409090311","邓贵","男","理学院"]                          #将row和rows写入文件
print(row)
print(row1)
print(row2)
print(row3)
print(row4,end='')
# for item in rows
#       print(item)

# filename='project/students.csv'
# with open(filename,'r')as file:
#       csv_reader=csv.reader(file)
#       for row in csv_reader:
#             print(row)
########## End ##########