python文件命名陷阱

36、Python中的元组、文件及其他对象类型 本文详细介绍了Python中的元组、文件及其他核心对象类型的基本概念和常见操作。内容涵盖元组的不可变性、文件读写管理以及命名元组的应用,同时解析了各核心对象类型的共性和常见陷阱。通过实例代码演示了如何高效使用这些数据结构进行编程,并提供了相关练习建议,帮助开发者更好地理解和应用。 阅读详情

最近在学习python,学习到xml部分,按照教程弄了代码,如下:

from xml.parsers.expat import ParserCreate

class DefaultSaxHandler(object):
    def start_element(self, name, attrs):
        print('sax:start_element: %s, attrs: %s' % (name, str(attrs)))

    def end_element(self, name):
        print('sax:end_element: %s' % name)

    def char_data(self, text):
        print('sax:char_data: %s' % text)

xml = r'''<?xml version="1.0"?>
<ol>
    <li><a href="/python">Python</a></li>
    <li><a href="/ruby">Ruby</a></li>
</ol>
'''

handler = DefaultSaxHandler()
parser = ParserCreate()
parser.StartElementHandler = handler.start_element
parser.EndElementHandler = handler.end_element
parser.CharacterDataHandler = handler.char_data
parser.Parse(xml)

运行结果如下:

Traceback (most recent call last):
  File "D:\workspace\python_test_project\test\xml.py", line 1, in <module>
    from xml.parsers.expat import ParserCreate
  File "D:\workspace\python_test_project\test\xml.py", line 1, in <module>
    from xml.parsers.expat import ParserCreate
ImportError: No module named 'xml.parsers'; 'xml' is not a package

百思不得姐,怎么会有错了,网上一搜才知道是我自己的文件名命名为了xml导致,不过,为什么我自己的文件名命名为xml就会导致这个错误呢?这还得结合python查找module顺序来说,python查找module的顺序如下:

1. 首先判断这个module是不是built-in即内建模块,
  如果是则引入内建模块,如果不是则在一个称为sys.path的list中寻找
2. sys.path在python脚本执行时动态生成,包括以下3个部分:
 a.脚本执行的位置,即当前路径
 b.环境变量中的PYTHONPATH, 即.bash_profile
 c.安装python时的依赖位置

而这里的xml属于第三方库不属于内建模块,那么打印下我的sys.pyth看下:

['D:\\workspace\\python_test_project\\test'
 'D:\\workspace\\python_test_project'
 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35-32\\DLLs'
 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35-32\\lib'
 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35-32'
 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35-32\\lib\\site-packages'
 'C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python35-32\\python35.zip']

可以看到如上面所说,先找的是当前目录,当前目录的文件名我又命名为了xml,所以python解释器会试图从当前的xml.py文件去找xml.parsers.expat,那当然是找不到的了,那么我系统的parsers.expat在哪里呢?找了下路径如下:

%PYTHONPATH%\Lib\xml\parsers

现在我想你知道为什么命名为xml又在里面用到xml模块会报错了。

那么你会说,既然你说当引入非内建的第三方模块时,由于python引入module顺序的原因,文件名不能和使用的第三方模块名一致,那么使用内建模块文件名和内建模块名会报错吗?

就上面的代码添加sys内建模块的引入,然后打印sys.path 将文件名命名为sys:

然后运行下,我们可以看到没任何问题,这就验证了我们上面的说法,当在代码中使用第三方module时,文件名不能和module文一样,在使用内建module的时候没这个限制,有不对的地方欢迎指正。

Altera下载器驱动配置:手把手教程(从零实现) 详解Altera USB-Blaster驱动安装全过程,从设备识别到软件配置一步一图,解决常见连接问题,确保开发下载器正常工作,适合初学者快速上手FPGA下载调试。 阅读详情

相关推荐

【COMSOL超材料和超表面仿真设计】

超材料和超表面的设计通常需要自定义材料属性。在COMSOL中,可以通过定义介电常数和磁导率的张量来模拟超材料的特性。对于超表面,通常需要定义表面阻抗或等效电路模型。

weixin_51101456的博客 1665

pytest提示ModuleNotFoundError: No module named ‘py.xml‘; ‘py‘ is not a package解决分析思维

pytest提示ModuleNotFoundError: No module named 'py.xml'; 'py' is not a package解决思维

qq_37292005的博客 5055

【多模态大模型】GLIP:零样本目标检测新范式与视觉语言理解

本文深入解析了多模态大模型GLIP在零样本目标检测和视觉语言理解领域的创新应用。GLIP通过统一目标检测与自然语言理解任务,实现了零样本学习能力,能够精准定位复杂文本描述对应的图像区域。文章详细介绍了GLIP的核心技术、数据策略及实战表现,并对比了与其他多模态模型的差异,为AI视觉理解提供了新范式。

weixin_29186249的博客 263

ModuleNotFoundError: No module named ‘py.xml‘; ‘py‘ is not a package

ModuleNotFoundError: No module named 'py.xml'; 'py' is not a package

mryell的博客 3145

大数据工程中的多模态数据处理技术

模态”(Modality)指的是数据的表现形式文本(Text):新闻、评论、文案等;图像(Image):照片、截图、医学影像等;音频(Audio):语音、音乐、环境声音等;视频(Video):短视频、监控视频、电影等(本质是图像+音频的组合);数值/结构化数据(Numerical/Structured):用户年龄、商品价格、传感器数据等;时间序列(Time Series):股票价格、物流轨迹、心率数据等。多模态数据(Multimodal Data)是指包含两种或以上模态的数据集。

AI云原生与云计算技术学院 1274

嵌入式工程师必看:BLDC电机驱动电路设计全流程(附MOS管选型指南)

本文为嵌入式工程师提供了BLDC电机驱动电路设计的全流程实战指南。文章深入解析了三相全桥逆变电路的核心原理,并重点阐述了功率MOSFET的选型关键参数,如Vds、Rds(on)和Qg。同时,详细介绍了栅极驱动设计、PCB布局布线要点及调试安全步骤,旨在帮助开发者构建稳定高效的BLDC驱动系统。

weixin_29194817的博客 589

Python当运行中出现No module named ‘**‘; ‘**‘ is not a package

Python当运行中出现No module named '**'; '**' is not a package 引起报错的原因: 1.所运行的文件或者在这个包路径下的文件与这个包名相同 比如说,我要运行gensim.py 但是我的包也叫gensim,就会出现这个报错 2.包虽然已经下载好,但是没有放在正确的路径下 ...

原来你就是网抑云啊的博客 2万+

MediaCodec视频解码流程详解及参考demo

本文主要讲解mediacodec的视频解码流程,及demo参考例子。

分享音视频技术 7875

安装python步骤;运行.py文件;运行.py文件报错ModuleNotFoundError的参考办法

前言: 安装python可以参考大佬链接-->python安装步骤:https://blog.csdn.net/nmjuzi/article/details/79075736 解决运行.py和执行python代码问题: 首先在运行Python文件或代码时需要区分执行命令的两种模式:命令行模式和交互模式;一般在命令行模式下不能直接执行python代码;在交互模式下不能执行非python安装目录下的.py文件,这时需要在待运行的.py文件夹内使用命令行模式执行文件。 命令行模式 命令行模式运行

woai_zhongguo的博客 2769

以太网_RGMII接口与GMII接口的转化_03

RGMII接口转GMII接口!

weixin_42499230的博客 378

手把手完整实现STM32+ESP8266+MQTT+ThingsCloud云平台+Android App及iOS App及微信小程序及Web App应用

本教程文章完整记录实现STM32+ESP8266+MQTT+ThingsCloud云平台+Android App及iOS App及微信小程序及Web App应用。

嵌入式阿齐Archie 1万+

Python:No module named问题详解

这里写目录标题一、sys.path问题二、模块和包导入问题三、模块的__name__ 一、sys.path问题 二、模块和包导入问题 三、模块的__name__

qq_44683653的博客 2万+

【EMC专题】为什么芯片规格书ESD性能中看不到MM(机器放电模型)

器件级ESD包括三种类型,HBM人体放电模型、MM机械放电模型和CDM元件充电模型。但在芯片规格书中为什么只见到HBM模型与CDM模型,却没有看到MM模型的数据?

一点硬件 450

Python 文件命名陷阱:importError import socket

初学Python, 测试socket通信时候,建立几个文件,命名为socket_0.py ,socket_1.py....结果用IDLE 运行很好,一旦使用shell 运行就老提示import socket错误。 折腾了好久,终于发现是文件命名的问题。  感谢以下这篇文章,摘要如下: python会优先搜索执行文件的当前路径,然后搜索其安装路径,测试如下。

helloapplepear的博客 3154

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

python导入自己的包丢了_Python Import系统给粗心人设下的“陷阱”

Python的import系统是非常强大的,但是也非常复杂。直到Python 3.3版本的发布,都没有关于之前预计的import语义的全面的解释,甚至跟着3.3版本的发布,sys.path如何初始化的细节也仍然需要搞清楚。即使3.3版本清除了许多东西,它仍旧需要搞定许多后向兼容性问题,这些问题可能导致一些奇怪的行为。并且,为了搞清一些第三方框架的运行机制,我们也需要充分了解3.3版本。此外,即使不...

weixin_42437067的博客 312

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

3.28 python文件操作及函数 学习笔记

文章目录1 文件操作1)打开文件2)读文件3)写文件4) 文件追加5)其他6)打开文件的另一种方式7)改文件2 函数1)万能参数2)命名空间3)函数陷阱4)global、nonlocal6)函数名7)新特性:**格式化输出**8)迭代器**迭代器** 1 文件操作 1)打开文件 ​ file = open(‘文件位置’, encoding=‘utf-8’, mode=‘r’) # 内置函数,...

G_xiaotiaowa 323

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

为什么你的Python文件会与内置模块冲突?从threading.RLock报错谈模块命名规范

本文通过一个典型的`AttributeError: module 'threading' has no attribute 'RLock'`报错案例,深入剖析了Python模块命名冲突的根源。文章解释了Python的模块导入机制,为何自定义的`threading.py`文件会遮蔽标准库,并系统性地梳理了应避免使用的“高危”模块名(如标准库和流行第三方库名称)。最后,文章提供了构建健壮模块命名规范体系的实用建议,包括文件命名原则、包的组织以及导入语句的最佳实践,帮助开发者从源头规避此类问题,提升代码的可维护性

agile9scrum的博客 691

Python新手必看:别再写file.read_lines()了,正确读取文件行的3种方法(附避坑指南)

本文针对Python新手常见的`file.read_lines()`错误,详细解析了`_io.TextIOWrapper`对象的文件读取机制,并提供了三种高效读取文件行的方法:`readlines()`、直接迭代文件对象和`readline()`。通过对比分析内存占用和性能,帮助开发者避开常见陷阱,提升文件处理效率。

521

3个常见的Python用法错误及解决方法

这篇文章中,我将介绍3个常见的且你不想犯的Python错误。错误1:默认的可变对象Python中可变的对象是什么?可变对象是可以更改的对象,比如列表(list),集合(set)和字典(di...

机器学习算法那些事 488

ROS2话题重命名实战:从命令行到launch文件的完整指南(附Python/XML/YAML示例)

本文提供了ROS2话题重命名的完整实战指南,涵盖从命令行调试到launch文件部署的多种方法。详细讲解了如何通过命名空间和重映射解决多节点集成、接口适配等实际问题,并附有Python、XML、YAML三种格式的示例代码,帮助开发者构建灵活、解耦的机器人系统架构。

t1u2v的博客 428

Python/JS/Go/Java同步学习(第五十五篇)四语言“重命名文件或目录“对照表: 雷影“老板“要求员工休息日野外实战训练团建风暴(附源码/截图/参数表/避坑指南)

本文通过生动比喻系统讲解了文件重命名与移动的核心概念和实现方法,涵盖Python、Java、Go和JavaScript四种语言。文章将技术操作类比为"忍者伪装术"和"中药炮制",形象阐释了不同语言中文件操作的特点:Python的灵活多变(os.rename/replace/renames)、Java的严谨可控(Files.move)、Go的直接高效(os.Rename)以及JavaScript的异步特性(fs.rename)。每种语言都配有实际代码示例和"中

本博客无转载,每一行代码都带药香,每一个概念都经实 战淬练| 初中学历非科班突围路线 从生产线走向全栈开发的实战派,通过: 10年ERP系统实施(服务100+客户,覆盖20行业) 5年医疗仓储物流数字化管理经验 2年生产制造打螺丝一线经验 835

python去除中间空格只留一个_汇总初学Python的21个操作难点,看完别再去踩坑了...

初学Python时,不管是容易的操作难点,还是困难的操作难点,都是要一步步的去踩坑摸索得出结果,小编今天就给大家汇总初学时Python的21个操作难点,看完之后可别再去掉到同样的坑里去了。1 查找当前盘或文件下面的目录直接 dir2 往上走一层 cd ..走两层../..(直接有无空格都可以)3 在cmd下 盘与盘之间的切换 直接 按D或d:就好4 想在一个盘下进去一个文件夹,用CD空格目标文件 ...

weixin_39601794的博客 144

动画制作中的版本管理与文件命名规范解析

版本管理是动画制作流程中的核心技术环节,其核心原理是通过标准化的文件命名体系实现项目资产的精确追踪。在大型动画项目中,科学的版本控制能显著提升团队协作效率,避免因命名混乱导致的返工问题。以《龙珠Z》《进击的巨人》等知名IP为例,典型的版本代号如'dragonballz_e159-2'包含作品缩写、集数编号和版本序号三重信息维度。工程实践中需要特别注意文件命名的技术细节,包括使用下划线连接符、版本号从0开始计数等规范。通过结合Git LFS等版本控制工具和正则表达式校验脚本,可以构建完整的动画版本管理系统,这

weixin_26833139的博客 288

ArcMap批量导出图片的Python脚本避坑指南:从数据驱动到文件命名全流程解析

本文详细解析了使用Python脚本在ArcMap中批量导出图片的全流程,包括数据驱动页面配置、文件命名优化、多格式导出及生产环境优化策略。特别针对PNG和JPEG格式的导出问题提供了避坑指南,帮助GIS工程师提升工作效率并避免常见错误。

stone的博客 179

用Sample Programs学习多语言编程的5个常见坑:新手如何避开这些陷阱

Sample Programs(sample-programs)是一个收录了"每种编程语言中的示例程序"的开源代码仓库:从 C、Python 到 Ada、Rust、Swift,同一个经典项目(Hello World、Fibonacci、冒泡排序……)都有多种语言的实现。它是新手对照学习多语言编程的绝佳素材库,但很多初学者第一次上手时,都会踩到几个"看不见的坑"。本文带你快速了解仓库结构,并一次性避

gitblog_00485的博客 367

Python学习记录:装饰器、生成器与文件重命名脚本实践

在自学编程的过程中,如何把零散的知识点沉淀为可复用的个人知识库,是决定学习效率的关键。Python作为一门广泛应用于自动化脚本的编程语言,其装饰器和生成器机制常被认为是进阶特性,但实际处理日志分析、批量文件重命名等任务时,它们能显著简化代码逻辑并降低内存消耗。装饰器通过闭包实现函数功能的动态增强,生成器则通过yield实现按需迭代,两者结合异常处理能让脚本在复杂现实场景中稳定运行。掌握这些核心概念,再配合规范的命名与记录习惯,就能将每一次学习转化为可检索、可回溯的资产。本文从学习记录的归档设计出发,拆解装饰

weixin_34094282的博客 244
上一篇: Ubuntu 14.04 LTS pip安装
下一篇: Oracle case when用法介绍
R先森
博客等级 码龄12年 193粉丝 63原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值