pyinstaller打包的使用/python路径获取/chardet/遍历文件

pyinstaller

不想每次运行py文件都需要打开python,不然对于电脑内存都是极大的消耗
安装pip install pyinstaller
cd切换到源码文件夹,便于直接调出py文件,如果不想,那就麻烦点把py路径也写上,估计没人愿意
如这个
pyinstaller -F update_file_or.py
-D –onedir 创建一个目录,包含 exe 文件,但会依赖很多文件(默认选项)
-w 表示去掉控制台窗口,就是那个cmd的黑框
-c –console, –nowindowed 使用控制台,无界面 (默认);
-p 表示你自己自定义需要加载的类路径,一般情况下用不到;
-i 表示可执行文件的图标。比如 -i a.ico

路径获取

因为写的程序需要用到当前程序所在目录的动态路径,所以这里记录一下
获取当前路径
os.getcwd() 程序放在那里,获得的绝对路径就是哪里
获取当前文件路径:(__file__是当前执行文件)
os.path.abspath(file)
获取主程序路径
os.path.abspath(sys.argv[0])
获取主程序目录
os.path.abspath(sys.path[0])

要区分目录和文件路径:

  1. os.getcwd()获取的是当前路径,得到的是当前目录,如果在程序运行过程中有路径切换,那么执行os.getcwd()得到的值是不同的

  2. __file__是当前执行的文件,打印__file__的路径,就是当前文件的路径

  3. sys.argv[0]是主文件的路径,不管引用了多少个py文件,它始终都是主文件的路径,不会变。

  4. sys.path[0]是主程序的目录路径,它同样始终都是主程序的目录,不会变。
    细节问题:python以/作为路径分隔符号,\作为转义符号,win10的路径不能直接使用,可以使用r表示原始字符串,这样不会报错
    如:a=r"C:\a.txt"

获得未知编码文件的编码

当你想用python读取一个文件却发现编码错误,要么费尽心思猜,要么自己去看编码,但是现在不用了
使用chardet检测,会推测出应该的编码,直接使用就好
pip3 install chardet

import chardet
f3 = open(file="C:/Users/Administrator.DESKTOP-KMH7HN6/AppData/Local/Temp/python_pgm/auto_sql_command.py",mode='rb') # 以二进制模式读取文件
data = f3.read() # 获取文件内容
f3.close() # 关闭文件

result = chardet.detect(data) # 检测文件内容
print(result) # {'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
print(result["encoding"])#utf-8

遍历文件

有时候想要修改某个目录下所有的文件夹名与与所有的文件名,以及文件的内容。
就需要先获得他们的路径

#!/usr/bin/python
# -*- coding:utf8 -*-

import os
allFileNum = 0
myfile=[]
mydir=[]
def printPath(level, path):
    global allFileNum
    ''''' 
    打印一个目录下的所有文件夹和文件 
    '''
    # 所有文件夹,第一个字段是次目录的级别
    dirList = []
    # 所有文件
    fileList = []
    # 返回一个列表,其中包含在目录条目的名称(google翻译)
    files = os.listdir(path)
    # 先添加目录级别
    dirList.append(str(level))
    for f in files:
        if (os.path.isdir(path + '/' + f)):
            # 排除隐藏文件夹。因为隐藏文件夹过多
            if (f[0] == '.'):
                pass
            else:
                # 添加非隐藏文件夹
                dirList.append(f)
                mydir.append(path + '/' + f)
        if (os.path.isfile(path + '/' + f)):
            # 添加文件
            fileList.append(f)
            myfile.append(path + '/' + f)
    # 当一个标志使用,文件夹列表第一个级别不打印
    i_dl = 0
    for dl in dirList:
        if (i_dl == 0):
            i_dl = i_dl + 1
        else:
            # print("得到的文件夹",'-' * (int(dirList[0])), dl)
            # 打印目录下的所有文件夹和文件,目录级别+1
            printPath((int(dirList[0]) + 1), path + '/' + dl)
    for fl in fileList:
        # print("得到的文件路径",'-' * (int(dirList[0])), fl)
        # 随便计算一下有多少个文件
        allFileNum = allFileNum + 1
if __name__ == '__main__':
        myfirstpath = "E:/BaiduNetdiskDownload/04-第四天/课件资料/课件资料/代码/代码/备份"
        printPath(1, myfirstpath)
        print('总文件数 =', allFileNum)
        for i in myfile:
            print(i)
        for i in mydir:
            print(i)




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值