python笔记4--python常见功能函数和问题

python笔记4--python常见功能函数和问题

不知不觉用python好久了,期间也遇见了形形色色的问题,平时这里一份文档那里一份笔记,要用的时候总会发现有些文档一时半会找不到,索性把曾经遇见的和以后遇见的都陆续归个档吧,以便于有需要的人和自己查看!

1、配置安装板块

1.1)使用清华源安装库
pip install PackageName -i https://pypi.tuna.tsinghua.edu.cn/simple 
pip install --upgrade pip 升级pip版本,或者easy_install -U pip==版本号如19.2.3
pip list 查看已经安装的包
pip install --user --upgrade scikit-learn==0.20.2 升级scikit-learn到指定的版本

也可以通过如下方式将系统默认pip源配置为清华的源:

进入root模式,设置index-url:
cd /root/
mkdir /.pip
cd ./.pip
vim pip.conf
#在打开的编辑文档中中输入以下代码, "=" 两侧不能有空格
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
[install]
trusted-host=pypi.tuna.tsinghua.edu.cn

1.2)Ubuntu升级pip后出现如下错误:cannot import name 'main'
解决方法:gedit /usr/bin/pip3 如果为Python2.7.x就直接/usr/bin/pip即可
原始为:from pip import main 修改后:from pip._internal import main

最近(2019/10)笔者使用easy_install -U pip==19.2.3 更新pip后,出现 File "/usr/bin/pip", line 9, in <module> from pip import main ImportError: cannot import name main 错误,使用如下方法也可以解决该问题:修改/usr/bin/pip为如下内容

python
#!/usr/bin/python
# GENERATED BY DEBIAN
import sys
# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import __main__
if __name__ == '__main__':
    sys.exit(__main__._main())

1.3)Ubuntu上更改默认python版本
ubuntu 上安装新版本的python后一般要同步安装对应的pipxx和pythonxx-dev,否则安装包的时候会报错!
python3.6安装方法:

1 添加源并安装py3.6
1) add-apt-repository ppa:jonathonf/python-3.6
2) apt-get update
3) apt-get install python3.6

2 配置默认python
配置只输入python3时就默认使用3.6版本:
1) update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
2) update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.6 2(数字越大优先级越高)
3) update-alternatives --config python3
4) python3 -V

3 设置pip
1) apt-get install python3-pip    # Python3
2) apt-get install python-pip     # Python2
如果系统安装了多版本的python3,则使用 python3.x get-pip.py 的方式安装对应的pip

python3.6 pip错误:ModuleNotFoundError: No module named 'pip._internal'
解决方法:重新安装pip3
wget https://bootstrap.pypa.io/get-pip.py  --no-check-certificate
python get-pip.py

python3.7 安装方法

1 安装基础工具
apt-get install software-properties-common
2添加源
add-apt-repository ppa:deadsnakes/ppa
3 更新源
apt-get update
4 安装python3.7
apt-get install python3.7
5 安装pip3.7
python3.7 get-pip.py
6 安装 dev
apt-get install python3.7-dev

若不安装dev,可能导致安装pip包的时候报错;
例如,python3.7 -m pip install mpi4py 报错:src/mpi4py.MPI.c:4:20: fatal error: Python.h: No such file or directory

参考文献:
How to Install Python 3.7 on Ubuntu 18.0https://linuxize.com/post/how-to-install-python-3-7-on-ubuntu-18-04/

python2|3 get-pip.py 报错

报错:
# python3 get-pip.py 
Traceback (most recent call last):
  File "get-pip.py", line 24311, in <module>
    main()
  File "get-pip.py", line 139, in main
    bootstrap(tmpdir=tmpdir)
......
  File "<frozen zipimport>", line 259, in load_module
  File "/tmp/tmp7wuq7dy3/pip.zip/pip/_vendor/packaging/tags.py", line 7, in <module>
ModuleNotFoundError: No module named 'distutils.util'
解决方法:
apt-get install python3-distutils
然后再执行上述py脚本

1.4) pip install TensorFlow 常见错误
pip install tensorflow 执行后出现错误:Failed to load the native TensorFlow runtime
解决方法:
(1)pip install  mkl
(2)下载并安装 Visual C ++ Redistributate 2015 x64
由于笔者安装过较多其它库,因此安装以上两个就解决了该问题,继续执行的时候出现如下错误:
Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA,大致意思为这个版本的TF不能通过AVX2 FMA进行编译,因此可以通过如下方式解决:
笔者添加如下两行就解决了该问题
import os 
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
参考文献:
Failed to load the native TensorFlow runtime解决方法 https://www.jianshu.com/p/4115338fba2d
警告:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA

1.5)pip 安装Factory报错

      File "<string>", line 1, in <module>
      File "/tmp/pip-install-yzp860pr/Factory/setup.py", line 11, in <module>
        readme_text = file(os.path.join(os.path.dirname(__file__), 'README')).read()
    NameError: name 'file' is not defined
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output

解决方法:下载https://pypi.org/project/Factory/#files 安装包,解压后将readme_text = file()改为readme_text = open(),然后python3 setup.py install即可。

1.6) pip 常见使用方法
安装pip3:apt-get install python3-pip    # Python3
安装pip2:apt-get install python-pip     # Python2
pip install appname
pip uninstall appname
pip freeze 查看安装了哪些内容
pip install --user scipy==0.15.1 #安装指定版本内容,权限不够可以使用--user
pip list --outdate #查看旧包
pip install --upgrade appname

1.7) virtualenv 使用
安装:pip install virtualenv
virtualenv --no-site-packages venName #不用系统环境
virtualenv --system-site-packages venName #使用系统pip环境
安装后接入venName,venName\Scripts\activate 就可以激活该ven,命令行前出现(env_blog)提示,之后可以在scripts/pip下安装需要的包;
使用pycharm的时候选择对应的env_blog环境即可,并指定env_blog的python.exe即可
deactivate就可以脱离当前环境

1.8)pep8 文档
pep8参考文档;http://topspeedsnail.com/python-code-style-guide/
pep8检查代码合规性:pep8 --show-source --show-pep8 test.py

1.9) ubuntu1910 python3.7 提示 No module named tkinter
解决方法:
sudo apt-get install python3-tk  
若为 python2,则:
sudo apt-get install python-tk  
安装后可以正常使用tkinter模块

1.10) pip 安装docker-compose后,docker-compose --verson报错 'module' object has no attribute 'SSL_ST_INIT'
解决方法: python -m easy_install --upgrade pyOpenSSL
升级后即可恢复正常

File "/usr/local/lib/python2.7/dist-packages/urllib3/contrib/pyopenssl.py", line 46, in <module>
    import OpenSSL.SSL
  File "/usr/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
    from OpenSSL import rand, crypto, SSL
  File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 118, in <module>
    SSL_ST_INIT = _lib.SSL_ST_INIT
AttributeError: 'module' object has no attribute 'SSL_ST_INIT'

1.11)pip 安装docker-compose(安装其它也可能会报)报错 NameError: name 'platform_system' is not defined
错误: File "<environment marker>", line 1, in <module>
NameError: name 'platform_system' is not defined
解决方法:升级pip 和 setuptools
easy_install -U pip 或 pip install --upgrade pip
pip install --upgrade setuptools

1.12)pip 安装scrapy后,跑程序报错 Import error: cannot import name 'opentype'
解决方法:pip install --upgrade google-auth-oauthlib

1.13) pip 安装 mysqlclient 报错
笔者最近安装python3.8 的mysqlclient 库,报如下错误,查阅资料发现是缺少对应的python-dev和mysql的相关库

MySQLdb/_mysql.c:46:10: fatal error: Python.h: No such file or directory
       46 | #include "Python.h"
          |          ^~~~~~~~~~
    compilation terminated.
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

解决方法:

apt-get install python3-dev  # 如果使用py2,那么需要安装python-dev
apt-get install libmysqlclient-dev 
pip3 install mysqlclient

2、功能函数板块

2.1)时间、日期相关函数

#参考 https://blog.csdn.net/guolanjiesxu/article/details/79295500
import datetime 
#获取当前日期
today_date = datetime.datetime.now().strftime('%Y-%m-%d')
print today_date

 #获取当前时间
today_time = datetime.datetime.now().strftime('%H:%M:%S')
print today_time

'''
2018-02-09
10:09:26
'''

#日期字符串转datetime
date_str = '2018-2-9'
date_datetime = datetime.datetime.strptime(date_str, '%Y-%m-%d')
print date_datetime
 
#时间字符串转datetime,,比较有意思,默认给的日期是1900-01-01,注意不是当前日期
time_str = '10:05:00'
time_datetime = datetime.datetime.strptime(time_str, '%H:%M:%S')
print time_datetime
 
#日期时间字符串转datetime
full_str = '2018-2-9 10:05:00'
t_datetime = datetime.datetime.strptime(full_str, '%Y-%m-%d %H:%M:%S')
print t_datetime
'''
2018-02-09 00:00:00
1900-01-01 10:05:00
2018-02-09 10:05:00
'''

# 日期字符串转换为时间戳
import datetime
import time
str_time = "2018-03-10 18:26:27.531"
dt = datetime.datetime.strptime(str_time, "%Y-%m-%d %H:%M:%S.%f")
t = dt.timetuple()
timeStamp = int(time.mktime(t))
print(timeStamp)
'''
1520677587
'''

获取A-B之间的所有日期:

def GetHisWeatherFromA2B(A='2016-01-01',B='2018-05-31'):
	'''
	03 获取A-B之间所有日期数,格式:yyyymmdd(20180101)
	'''
	print('GetHisWeatherFromA2B:')
	DateStart = datetime.datetime.strptime(A, '%Y-%m-%d') #<class 'datetime.datetime'>
	DateEnd = datetime.datetime.strptime(B, '%Y-%m-%d')
	curDate = DateStart
	while(curDate<DateEnd):
		curDate = curDate+datetime.timedelta(days=1)
		print(curDate.strftime('%Y%m%d'))

2.2) CSV相关函数

import csv

def SaveToCSV(dataList,fileName,wrtype='a'):
	with open(fileName, wrtype, newline='') as csvfile:
		writer  = csv.writer(csvfile)
		for row in dataList:
			writer.writerow(row)

def GetFromCSV(FileName):
    f = open(FileName,'r')
    csvlist = f.readlines()
    f.close()
    x = []
    for i in range(len(csvlist)):
    	tempList = csvlist[i].replace('\"','').split(',')
    	x.append(tempList)
    return x

2.3)json-dict互转功能

读取本地json文件,并转化为dict类型:

pathName = 'E:\\Test.json' #此处json文件要为非格式化的,即无indent类型的json,否则会报错
with open(pathName,'r',encoding='utf-8') as f:
	tmpDict = json.load(fp=f)
	retDict = tmpDict
print(retDict)
#将json字符串转为dict数据类型
objJson = '{"b1": "b1", "c1": "c1", "a1": 1, "a2": 2, "a3": 3}'
objDict = json.loads(objJson)
print(objDict)
#输出结果:
'''
{'b1': 'b1', 'c1': 'c1', 'a1': 1, 'a2': 2, 'a3': 3}
'''

将dict数据转为json并保存到文本中:

fileName='dict2json.json'
#retDict 为需要保存的dict类型数据
with open(fileName, 'w',encoding='utf-8') as f:
	json.dump(retDict, f,ensure_ascii=False) #dump将dict转为json字符串并存储到对应的文件中
print('fileName',fileName)
#将dict转为json数据
objDict = {'b1':'b1','c1':'c1','a1':1,'a2':2,'a3':3}
objJson = json.dumps(objDict)
objJson1= json.dumps(objDict,sort_keys=True, indent=2)#排序并且缩进两个字符输出
print(objJson)
print(objJson1)
#输出结果如下:
''' 
{"b1": "b1", "c1": "c1", "a1": 1, "a2": 2, "a3": 3}
{
  "a1": 1,
  "a2": 2,
  "a3": 3,
  "b1": "b1",
  "c1": "c1"
}
'''

2.4)python捕获中断,防止数据丢失

todo...

2.5)  python发送邮件

todo...

3、说明

以上默认测试python版本为python2.7.x或者python3.6.x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值