python 打开文件夹-python读取文件夹下文件
我自己写了一个py文件。 我之前一直把这个文件复制到当前目录下,用import导入。
但是后来觉得这样太麻烦了,修改的时候容易造成混乱和错误。
于是突然想到,能不能像pandas一样打包安装python 打开文件夹,会方便很多。
于是找了很多资料,发现有这么一个方法。
折腾了一天,各种错误,总算是搞定了。
1.严格的目录结构
目录结构必须符合:
MyPackages/
├── README.txt # txt或md格式;txt必须为ANSI编码,否则打包时会出错
├── setup.py # 此文件必不可少
└── MyKlines/ # 文件夹,名称为模块的名称
├── __init__.py # 必须,里面可以没有代码
└── MyKlines.py # 这是需要打包的py文件
2.创建__init__.py文件
在MyKlines文件夹下创建__init__.py文件,__init__.py文件内容如下:
# 导入当前目录的.MyKlines
from .MyKlines import * # 此项为必须!必不可少!
__version__ = '1.0' # 设置版本信息
3.放置MyKlines.py文件
将需要打包的MyKlines.py复制到MyKlines文件夹中,与__init__.py同级。
4.setup.py文件
在需要打包的模块所在目录下创建一个setup.py文件,即MyPackages文件夹。
from setuptools import setup
# from setuptools import find_packages
setup(
name="MyKlines",
version="2022.12.2",
author="梦悠",
author_email="1756186835@qq.com", # 作者邮箱
url='', # github或者自己的网站地址
description="绘制K线、反转图、砖型图等;获取股票和期货数据",
long_description=open('README.txt').read(), #读取文件中介绍包的详细内容
long_description_content_type="text/markdown", # 指定详细描述的文本格式
python_requires=">=3.6.0", # python依赖版本
license="MIT Licence", # 指定许可证
install_requires=[""], # 需要安装的依赖,如["matplotlib", "talib", "pylab", "numpy", "pandas", "baostock"]
packages=[
"MyKlines",
], # 打包目录下的指定模块
# packages=find_packages(), # 打包目录下的全部模块
# packages=find_packages(exclude=["test", "test.*"]) # 打包除了指定模块的全部模块
# include_package_data = True, # 打包路径下的其他文件
platforms="any", # 程序适用的软件平台列表
)
5.CMD进入setup.py所在目录
在 CMD 命令行中,输入 setup.py 文件所在的目录。
注意:该命令需要输入两次。
# 第一次输入 cd E:\Python\MyPackage
C:\Users\caogu>cd E:\Python\MyPackage
# 第二次输入 E:
C:\Users\caogu>E:
或者在setup.py文件所在目录的地址栏输入cmd,回车打开命令行。
6.运行打包命令
python setup.py bdist_wheel
运行结果:
running bdist_wheel
running build
installing to build\bdist.win-amd64\wheel
running install
running install_egg_info
running egg_info
creating MyKlines.egg-info
writing MyKlines.egg-info\PKG-INFO
writing dependency_links to MyKlines.egg-info\dependency_links.txt
writing top-level names to MyKlines.egg-info\top_level.txt
writing manifest file 'MyKlines.egg-info\SOURCES.txt'
reading manifest file 'MyKlines.egg-info\SOURCES.txt'
writing manifest file 'MyKlines.egg-info\SOURCES.txt'
Copying MyKlines.egg-info to build\bdist.win-amd64\wheel\.\MyKlines-2022.12.2-py3.8.egg-info
running install_scripts
creating build\bdist.win-amd64\wheel\MyKlines-2022.12.2.dist-info\WHEEL
creating 'dist\MyKlines-2022.12.2-py3-none-any.whl' and adding 'build\bdist.win-amd64\wheel' to it
adding 'MyKlines-2022.12.2.dist-info/METADATA'
adding 'MyKlines-2022.12.2.dist-info/WHEEL'
adding 'MyKlines-2022.12.2.dist-info/top_level.txt'
adding 'MyKlines-2022.12.2.dist-info/RECORD'
removing build\bdist.win-amd64\wheel
打包完成后生成3个文件夹:
MyKlines.egg-info
dist
build
可安装的 wheel 文件在 dist 文件夹中
MyKlines-2022.12.2-py3-none-any.whl
7.打开dist文件夹,在cmd中安装whl文件
pip install MyKlines-2022.12.2-py3-none-any.whl
安装成功:
Processing e:\python\mypackage\dist\myklines-2022.12.2-py3-none-any.whl
Installing collected packages: MyKlines
Successfully installed MyKlines-2022.12.2
做个测试:
from MyKlines import *
data = get_data_juejin(symbol="bu2301", start="2022-12-2", end="2022-12-2 23:00:00", frequency="15m", adjust=0)
print(data)
完美运行:
date symbol frequency open close high low volume money position
0 2022-12-02 09:15:00 bu2301 15m 3462.0 3475.0 3484.0 3460.0 15299 5.3121e+08 124838
1 2022-12-02 09:30:00 bu2301 15m 3475.0 3478.0 3481.0 3473.0 4380 1.5230e+08 124355
2 2022-12-02 09:45:00 bu2301 15m 3478.0 3493.0 3495.0 3478.0 6288 2.1931e+08 124486
3 2022-12-02 10:00:00 bu2301 15m 3493.0 3523.0 3523.0 3488.0 13946 4.8931e+08 124601
4 2022-12-02 10:15:00 bu2301 15m 3523.0 3516.0 3524.0 3515.0 8586 3.0217e+08 125492
5 2022-12-02 10:45:00 bu2301 15m 3516.0 3524.0 3525.0 3510.0 6973 2.4534e+08 125447
6 2022-12-02 11:00:00 bu2301 15m 3524.0 3534.0 3535.0 3517.0 7355 2.5921e+08 125067
7 2022-12-02 11:15:00 bu2301 15m 3534.0 3542.0 3544.0 3530.0 12721 4.5010e+08 125301
8 2022-12-02 11:30:00 bu2301 15m 3541.0 3544.0 3548.0 3536.0 7481 2.6508e+08 124536
9 2022-12-02 13:45:00 bu2301 15m 3541.0 3538.0 3543.0 3527.0 9235 3.2655e+08 125234
10 2022-12-02 14:00:00 bu2301 15m 3538.0 3544.0 3545.0 3535.0 5780 2.0462e+08 125464
11 2022-12-02 14:15:00 bu2301 15m 3543.0 3556.0 3558.0 3542.0 7657 2.7184e+08 125087
12 2022-12-02 14:30:00 bu2301 15m 3557.0 3542.0 3562.0 3539.0 7927 2.8152e+08 124268
13 2022-12-02 14:45:00 bu2301 15m 3543.0 3540.0 3553.0 3535.0 5598 1.9834e+08 123743
14 2022-12-02 15:00:00 bu2301 15m 3540.0 3537.0 3547.0 3532.0 22021 7.7935e+08 121299
15 2022-12-02 21:15:00 bu2301 15m 3536.0 3552.0 3556.0 3513.0 27498 9.7131e+08 118748
16 2022-12-02 21:30:00 bu2301 15m 3553.0 3542.0 3556.0 3538.0 8426 2.9888e+08 118993
17 2022-12-02 21:45:00 bu2301 15m 3543.0 3534.0 3544.0 3530.0 11737 4.1514e+08 118833
18 2022-12-02 22:00:00 bu2301 15m 3533.0 3515.0 3535.0 3514.0 9716 3.4224e+08 117886
19 2022-12-02 22:15:00 bu2301 15m 3515.0 3502.0 3517.0 3488.0 16185 5.6649e+08 115532
补充:打包时遇到的错误! 1.ModuleNotFound错误
我们导入自定义模块import MyKlines时,提示错误:
ModuleNotFoundError: No module named 'MyKlines'
这是因为setup()函数在setup.py文件中没有这段代码:
packages=[ "MyKlines",] # 打包目录下的指定模块
简单来说就是没有正确打包,需要的模块没有打包到wheel文件中。
2.属性错误
模块已经安装,pip list也看到了模块,可以导入到py文件中python 打开文件夹,但是模块中的函数无法使用。
AttributeError: module 'MyKlines' has no attribute 'get_data_juejin'
这是因为 __init__.py 文件中的错误。
__init__.py 的代码中,缺少导入模块的命令。
只需添加以下命令。 注意力。 必不可少。
from .MyKlines import * # 此项为必须!必不可少!注意.不可缺少!