python输入文件名读取文件_【已解决】Python中如何获得Windows文件完整路径中的文件名...

折腾:

期间,在mac中用PyCharm调试Python程序,尝试去手动测试,当输入的是反斜杠的路径时

是否可以从路径中提取出文件名

代码:# get base filename

# your/path/xxx.py -> xxx.py

# your\path\xxx.py -> xxx.py

# xxx.exe          -> xxx.exe

# xxx              -> xxx

def getBasename(fullFilename):

return os.path.basename(fullFilename)

# remove file suffix

def removeSuffix(fileBasename):

splitedTextArr = os.path.splitext(fileBasename)

filenameRemovedSuffix = splitedTextArr[0]

return filenameRemovedSuffix

# get input filename, from argv

# python AutoOrder/AutoOrder.py -> AutoOrder/AutoOrder.py

def getInputFilename():

argvList = sys.argv

print “argvList=%s”%(argvList)

return argvList[0]

# get input file’s base name

# AutoOrder/AutoOrder.py -> AutoOrder.py

# def getInputFileBasename():

# for debug

def getInputFileBasename(inputFilename = None):

curInputFilename = getInputFilename()

if inputFilename :

curInputFilename = inputFilename

print “curInputFilename=%s”%(curInputFilename)

inputBasename = getBasename(inputFilename)

print “inputBasename=%s”%(inputBasename)

return inputBasename

filenamePyWithBackslashPath = “D:\\xxx\yyy\zzz\AutoOrder.py”

print “%s -> %s”%(filenamePyWithBackslashPath, crifanLib.getInputFileBasename(filenamePyWithBackslashPath))

结果是提取不出来:

xxx\yyy\zzz\AutoOrder.py -> xxx\yyy\zzz\AutoOrder.py

os.path.basename windows

去试试加上盘符:

filenamePyWithBackslashPath = “D:\\xxx\yyy\zzz\AutoOrder.py”

filenamePyWithBackslashPath = “c:\\test.csv”

结果问题依旧:

D:\xxx\yyy\zzz\AutoOrder.py -> D:\xxx\yyy\zzz\AutoOrder.py

c:\test.csv -> c:\test.csv

看到:

说是,可以单独蹈入windows平台内部所用的os的path的模块的

-》才猜测:

看来是:

python标准库中,是根据不同平台,window/linux等,调用对应不同的path模块

win-》根据\作为分隔符

linux类-》根据/作为分隔符的

然后也才注意到官网说的:posixpath for UNIX-style paths

ntpath for Windows paths

macpath for old-style MacOS paths

那主动(在Mac平台下)导入ntpath试试

(注:其中ntpath=NT path,NT是之前Windows的相关的叫法)

果然用上:def getBasename(fullFilename):

# return os.path.basename(fullFilename)

import ntpath

return ntpath.basename(fullFilename)

就可以了:

xxx\yyy\zzz\AutoOrder.py -> AutoOrder.py

而此处很明显,只是巧了在Mac中测试Windows的路径, 所以需要手动置顶path所用哪个模块

而正常的情况下:

Windows中安装的Python,内置默认使用ntpath

Mac/Linux中安装的Python,内置默认使用posixpath

是没有问题的。

【总结】

在正常的情况下:Windows中安装的Python,内置默认使用ntpath反斜杠\为路径分隔符

Mac/Linux中安装的Python,内置默认使用posixpath斜杠/为路径分隔符

则在不同平台下直接使用os.path.xxx都是可以正常处理的

包括用os.path.basename可以获得对应的文件名本身。

而此处之所以无法正确获取windows的路径的文件名是因为:

在Mac(类Linux)平台下,去测试Windows的路径,所以无法正确监测分隔符

解决办法:

可以不处理,因为到正常情况下,代码是可以正常工作的

或者是为了调试验证,可以Mac下主动导入ntpath:# get base filename

# your/path/xxx.py -> xxx.py

# your\path\xxx.py -> xxx.py

# xxx.exe          -> xxx.exe

# xxx              -> xxx

def getBasename(fullFilename):

# return os.path.basename(fullFilename)

import ntpath

return ntpath.basename(fullFilename)

# remove file suffix

def removeSuffix(fileBasename):

splitedTextArr = os.path.splitext(fileBasename)

filenameRemovedSuffix = splitedTextArr[0]

return filenameRemovedSuffix

# get input filename, from argv

# python AutoOrder/AutoOrder.py -> AutoOrder/AutoOrder.py

def getInputFilename():

argvList = sys.argv

print “argvList=%s”%(argvList)

return argvList[0]

# get input file’s base name

# AutoOrder/AutoOrder.py -> AutoOrder.py

# def getInputFileBasename():

# for debug

def getInputFileBasename(inputFilename = None):

curInputFilename = getInputFilename()

if inputFilename :

curInputFilename = inputFilename

print “curInputFilename=%s”%(curInputFilename)

inputBasename = getBasename(inputFilename)

print “inputBasename=%s”%(inputBasename)

return inputBasename

即可正确处理windows的文件路径,提取出需要的文件名了。

详细和最新代码参见:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值