文章目录
- ❤️ 作者简介:大家好我是小鱼干儿♛是一个热爱编程、热爱算法的大三学生,蓝桥杯国赛二等奖获得者
- 🐟 个人主页 :https://blog.csdn.net/qq_52007481
- ⭐ 个人社区:【小鱼干爱编程】
- 🔥 算法专栏:算法竞赛进阶指南
- 💯 刷题网站:市面上的刷题网站有很多如何选择一个适合自己的网站呢,博主给这里推荐一款我常用的刷题网站 👉点击跳转
os是“operating system”的缩写,os模块提供各种 Python 程序与操作系统进行交互的接口,使用os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码的可移植性
注意 一定要使用 import os 而不是 from os import * 。这将避免内建的 open() 函数被 os.open() 隐式替换掉,因为它们的使用方式大不相同。
import os
os.getcwd()
# 将工作目录切换到'D:/Pycharm'
os.chdir('D:/Pycharm')
print(os.getcwd()) #D:\Pycharm
os.environ
os.getlogin()
os.name
'''
返回值的意思
posix Linux 和 Mac OS
nt Windows
java Java 虚拟机环境
'''
FileExistsErrorFileNotFoundError# 在当前目录下创建一个名为test的文件夹
os.mkdir('test')
# 报错内容
# FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'test'
# 创建a文件夹,并且在a文件夹下创建b文件夹
os.makedirs('a/b')
OSError: [WinError 145] 目录不是空的。'filename'# 删除文件夹a
os.rmdir('a')
# 删除文件夹 文件夹 a及子文件夹b
os.removedirs('a/b')
# 删除文件a.txt
os.remove('a.txt')
src 最后的路径或文件的名字,中间路径都必须要存在,否则就会抛出FileNotFoundError# 将文件名b修改成文件名c
os.rename('a/b','a/c')
# 文件目录: a/c c文件夹是a文件夹的子文件夹
# 将文件c移动到和a同级目录下
os.rename('a/c','c')
# 文件目录: a/c c文件夹是a文件夹的子文件夹
# 将文件c移动到和a同级目录下并改名为'newname'
os.rename('a/c','newname')
# 文件目录: a/c/w.txt
# 将文件w.txt修改成ww.txr
os.rename('a/c/w.txt','a/c/ww.txt')
# 同样也可以移动文件并重名的方式一样,用法和移动文件并重名的方式一样
# 重命名可以重命名中间路径(实际上是,先新建新的目录,然后判断原目录是否可以删除,如果可以删除,就删除)
os.renames('a/b/a.txt','a/c/aaa.txt')
os.path中的函数基本上是纯粹的字符串操作。换句话说,传入该模块函数的参数甚至不需要是一个有效路径,该模块也不会试图访问这个路径,而仅仅是按照“路径”的通用格式对字符串进行处理
os.path
# 根据相对路径返回绝对路径
print(os.path.abspath('a/c/aaa.txt'))
# 检查文件是否存在
print(os.path.exists('a/c'))
# 检查aaa.txt文件是否存在
print(os.path.exists('a/c/aaa.txt'))
# 返回文件a最后的访问时间
print(os.path.getatime('a'))
t = os.path.getatime('a') # 获取时间戳
tupTime = time.localtime(t) # 将时间戳转换成本地时间
stadardTime = time.strftime("%Y-%m-%d %H:%M:%S", tupTime) # 转换成对应的时间格式
print(stadardTime) # 2022-09-18 11:44:28
# 获取aaa.txt文件的创建时间(windows)
t = os.path.getctime('a/c/aaa.txt')
# 获取文件aaa.txt的大小
os.path.getsize('a/c/aaa.txt')
a = os.path.split('D:/aa/bb')
print(type(a)) # <class 'tuple'>
print(a) # ('D:/aa', 'bb') 头部和尾部
# 当最后为’/‘时
a = os.path.split('D:/aa/bb/')
print(a) # ('D:/aa/bb', '') 尾部为空
# 当路径path中没有路径的时候
a = os.path.split('aa')
print(a) # ('', 'aa') # 头部为空
# 当传入的路径为空时
a = os.path.split( '')
print(a) # ('', '') # 头部和尾部均为空
# 判断文件是否存在
os.path.isfile('a/c/aaa.txt')
# 判断路径a/c是否存在
os.path.isdir('a/c')
注解 本函数适用于底层的 I/O。常规用途请使用内置函数 open(),该函数的 read() 和 write() 方法(及其他方法)会返回 文件对象。要将文件描述符包装在文件对象中,请使用 fdopen()。
os.open(file, flags[, mode])
'''
file 文件名
flags 模式
mode 可选参数, mode 设置其权限状态
'''
在写入文件时不能直接写入字符串否则会报错TypeError: a bytes-like object is required, not 'str'
# 打开文件
fd = os.open("foo.txt", os.O_RDWR|os.O_CREAT ) # 模式可以并存中间用 | 隔开
# 写入字符串
a = b"This is test"
os.write(fd,a)
# 关闭文件
os.close(fd)
print("关闭文件成功!!")
最后的补充
最后如果忘记了os的用法可以使用内置的 dir() 和 help() 函数来查看函数的用法
dir() 返回一个列表包括 os模块的所有函数名
print(dir(os))
help() 返回所有os模块的所有内容
print(help(os))
这样的结果看着确实有点不太人性化

使用help函数查看具体的函数使用方法
print(help(os.getcwd))
print(help('os.getcwd')) # 使用字符串也可以
返回函数的作用

假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
我想将我的MacSnowLeopardruby从1.8.7升级到1.9.1版本,有人知道轻松且最好的升级方法吗?因为我读了一些论坛/帖子/博客/讨论说覆盖苹果发布的ruby不好将Rails从版本2.2.2升级到2.3.8的最佳方法是什么?因为我找到的所有信息都仅适用于豹/老虎,而且很少有关于雪豹的复杂文章。他们还说覆盖apple提供的rails不好吗。谁能帮帮我?谢谢。 最佳答案 DanBenjamin有一些greatinstructionsforcompilingandinstallingRuby,RubyGemsandRai
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。