文章目录
1 所遇问题
1.1 输出格式有问题
背景:python2.7,IDE:VSCode
源码:
two.txt:
输出:
预期应该为商品,单价,数量。
修改最后一行的print
1.2 打包pip install 包
背景:内网需要安装python和一些包,无法连互联网,只能外网下载再u盘拷过去。
-
在外网机器Python的安装目录中新建一个文件夹,如packages:
-
进入到packages文件夹下,shift按住,鼠标右键“在此处打开命令行”,输入pip
list查看系统中安装了哪些python包,如下:
-
把所有包名及版本号,重定向到requirements.txt中
pip freeze >requirements.txt
- 然后下载系统中已经安装的所有包到一个目录下,比如在packages的packages中,使用如下命令,此时packages下有两个文件:
pip download -r requirements.txt -d packages
- 内网安装。先复制刚才外网机器上的文件夹pacjages到内网机器对应的目录
- 进入到D:\Python37\packages下,打开命令行,执行安装
pip install --no-index --find-links=packages -r requirements.txt
如果失败,可以一个一个安装
pip install XXXX包名
1.3 python2.7 卸载失败问题
背景:使用.msi文件进行卸载,出现以下情况:
解决方法:
找到出问题的版本,个人当时出问题的版本是2.7.10。官网下载msi文件。
依次运行。
1.4 open函数传参数出错
背景:python2.7,open函数传递参数。
自定义函数,函数里面调用open函数
如果不在路径前面加r,就会报错。按理说应该是
open(file_path,mode)
后面写出函数,拼接的时候老出错。
解决办法:
路径使用/
‘C:/Users/76585/Desktop/compare/one.txt’
open函数可以正常使用open(path,mode)
1.5 Python编码错误的解决办法SyntaxError: Non-ASCII character ‘\xe5’ in file
原因:python的默认编码文件是用的ASCII码,而你的python文件中使用了中文等非英语字符
解决办法:
在Python源文件的最开始一行,加入一句:
#coding=UTF-8(等号换为”:“也可以)
或者
#-*- coding:UTF-8 -*-
1.6 RuntimeError: dictionary changed size during iteration
在字典遍历过程中修改字典元素,报错 RuntimeError: dictionary changed size during iteration
得知遍历时不能修改字典元素
for k in func_dict.keys():
if func_dict[k] is np.nan:
del func_dict[k]
continue
解决办法:将遍历条件改为列表
for k in list(func_dict.keys()):
if func_dict[k] is np.nan:
del func_dict[k]
continue
1.7 VScode code runner无法运行出正确的结果
背景:
内网电脑上,通过python程序对文件进行读写操作,但是没有出现相应的结果。单步调试可以出正确的结果。
分析:
通过print 输出可以发现问题。命令行运行py文件可以得到正确的结果,说明原因出在code runner上面。
解决办法:
1.首选项找到设置
2.输入code-runner,找到 Executor Map
3.选择这个,(将设置复制为id)
将复制的内容粘贴到里面
修改其中python字段的python值替换为vscode左下角的python解释器:
结果如下;
"python": "C:\\Python27\\python.exe -u" //注意转义符
//下面这个也可以
"python": "\"C:/Python27/python.exe\" -u"
2 技术知识点
2.1 遍历文件夹下的文件名
#方法1:使用os.listdir
import os
for filename in os.listdir(r'c:\windows'):
print("文件夹名字",filename)
#方法2:使用glob模块,可以设置文件过滤
import glob
for filename in glob.glob(r'c:\windows\*.exe'):
print("是.exe的文件名",filename)
#方法3:非递归
import os
for dirpath, dirnames, filenames in os.walk('D:'):
print('文件路径', dirpath)
print('文件夹名字',dirnames)
for filename in filenames:
print('文件名', filename)
2.2 字符串操作
2.2.1 字符串切割
注:使用前需要引入包(import re)
功能:split能够按照所能匹配的字串将字符串进行切分,返回切分后的字符串列表
形式:
re.split(pattern, string[, maxsplit=0, flags=0])
pattern:匹配的字符串
string:需要切分的字符串
maxsplit:分隔次数,默认为0(即不限次数)
flags:标志位,用于控制正则表达式的匹配方式,比如:是否区分大小写,,,如下图所示
具体分析:
//传入某个文件的绝对路径(file_path),根据 '\'进行分割,将结果存入列表,再取出最后一个,就是文件名。
new_line= re.split(r'[/]',str(file_path))
file_name=new_line[-1]
2.2.2 替换字符串钟的匹配项
re.sub()
def sub(pattern, repl, string, count=0, flags=0):
"""Return the string obtained by replacing the leftmost
non-overlapping occurrences of the pattern in string by the
replacement repl. repl can be either a string or a callable;
if a string, backslash escapes in it are processed. If it is
a callable, it's passed the match object and must return
a replacement