os、文件操作

主要用于工具篇——使用ABOBOO学美剧(强推)python脚本的优化和扩展
主要功能:

  1. 原只能生成一张卡片,现在可以生成三张,即>英汉>音汉>音英,音即是音频的意思。
  2. 自动移动到anki目录
  3. 自动清理文件夹

下面是我写程序时遇到的问题

如何判断一个变量是否是空字符?
#encoding=utf-8
str="\n\t"
if str.strip()=="":
    print("str is null")
if not str.strip():
    print("str is null")
关于文件夹操作

文件操作大全
下面是一个例子原文在此

#文件、文件夹的移动、复制、删除、重命名

#导入shutil模块和os模块
import shutil,os

#复制单个文件
shutil.copy("C:\\a\\1.txt","C:\\b")
#复制并重命名新文件
shutil.copy("C:\\a\\2.txt","C:\\b\\121.txt")
#复制整个目录(备份)
shutil.copytree("C:\\a","C:\\b\\new_a")

#删除文件
os.unlink("C:\\b\\1.txt")
os.unlink("C:\\b\\121.txt")
#删除空文件夹
try:
    os.rmdir("C:\\b\\new_a")
except Exception as ex:
    print("错误信息:"+str(ex))#提示:错误信息,目录不是空的
#删除文件夹及内容
shutil.rmtree("C:\\b\\new_a")

#移动文件
shutil.move("C:\\a\\1.txt","C:\\b")
#移动文件夹
shutil.move("C:\\a\\c","C:\\b")

#重命名文件
shutil.move("C:\\a\\2.txt","C:\\a\\new2.txt")
#重命名文件夹
shutil.move("C:\\a\\d","C:\\a\\new_d")

文件编码问题
import os
import sys
import codecs
import chardet
# from subFunc_tools import *
 
def list_folders_files(path):
    """
    返回 "文件夹" 和 "文件" 名字
    :param path: "文件夹"和"文件"所在的路径
    :return:  (list_folders, list_files)
            :list_folders: 文件夹
            :list_files: 文件
    """
    list_folders = []
    list_files = []
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if os.path.isdir(file_path):
            list_folders.append(file)
        else:
            list_files.append(file)
    return (list_folders, list_files)
 
def convert(file, in_enc="GBK", out_enc="UTF-8"):
    """
    该程序用于将目录下的文件从指定格式转换到指定格式,默认的是GBK转到utf-8
    :param file:    文件路径
    :param in_enc:  输入文件格式
    :param out_enc: 输出文件格式
    :return:
    """
    in_enc = in_enc.upper()
    out_enc = out_enc.upper()
    try:
        print("convert [ " + file.split('\\')[-1] + " ].....From " + in_enc + " --> " + out_enc )
        f = codecs.open(file, 'r', in_enc)
        new_content = f.read()
        codecs.open(file, 'w', out_enc).write(new_content)
    # print (f.read())
    except IOError as err:
        print("I/O error: {0}".format(err))
 
 
#将路径下面的所有文件,从原来的格式变为UTF-8的格式
 
if __name__ == "__main__":
    path = r'G:\Temp'
    (list_folders, list_files) = list_folders_files(path)
 
    print("Path: " + path)
    for fileName in list_files:
        filePath = path + '\\' + fileName
        with open(filePath, "rb") as f:
            data = f.read()
            codeType = chardet.detect(data)['encoding']
            convert(filePath, codeType, 'UTF-8')

文件转码小脚本
https://www.jianshu.com/p/1c7dc6669311

csv写入

读写CSV数据
python3 csv

下面是主程序
#-*-coding:utf-8-*-
import re
import os 
import sys
import csv
import glob
import time
import chardet
import codecs
import pandas as pd
import shutil

output = "Cenvert.csv"

def Main():
    lrcfiles = os.getcwd() + "//*.lrc"
    flist = glob.glob(lrcfiles)
    writerfile = csv.writer(open(output,'w+'))
    writerfile 
    pattern1 = re.compile(r'00]([\s\S]*)\t')
    pattern2 = re.compile(r'\t([\s\S]*)')
    i = 0
    for f in flist:
        i = i + 1
        fh = open(f,'r')
        content = fh.read()
        english = pattern1.findall(content)[0]
        chinese = pattern2.findall(content)[0]
        print(english)
        print(chinese)
        mp3file = f[:-3] + "mp3"
        newname = str(time.time()) + str(i) + ".mp3"
        print(mp3file)
        print(newname)
        os.rename(mp3file,newname)
        ankisound = "[sound:" + newname + "]"
        ankisound.encode()
        if chinese.strip() == '':
            answer = [
                (ankisound,(english+chinese)),
                (english,(ankisound+chinese))
            ]
        else:
            answer = [
                (ankisound,(english+chinese)),
                (english,(ankisound+chinese)),
                (chinese,(ankisound+english))
            ]
        writerfile.writerows(answer)
        fh.close()
    del writerfile
def convert(file,out_enc):
    with open(file, "rb") as f:
            data = f.read()
            codeType = chardet.detect(data)['encoding']
            in_enc= codeType.upper()
            out_enc = out_enc.upper()
            f = codecs.open(file, 'r', in_enc)
            new_content = f.read()
            codecs.open(file, 'w', out_enc).write(new_content)
def remove():
    oldfile = os.getcwd() + "//*.mp3"
    oldfiles = glob.glob(oldfile)
    newfile = 'C:\\Users\\name\AppData\\Roaming\\Anki2\\用户1\\collection.media\\'
    for i in oldfiles:
        try:
            shutil.move(i,newfile)
        except :
            os.unlink(i)

def del_lrc():
    old_lrc = os.getcwd() + "//*.lrc"
    old_lrcs = glob.glob(old_lrc)
    for i in old_lrcs:
        os.unlink(i)

if __name__ == "__main__":
    Main()
    convert(os.getcwd()+"\\\\" + output,'UTF-8')
    remove()
    del_lrc()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值