摆脱元组中的空字符串

时间:2013-05-16 15:30:42

标签: python list loops tuples

path = "C:/Users/bg/Documents/Brad/Code/Visual Studio/"

def getUnitTest(path):
    foundFiles = []

    for r,d,f in os.walk(path):
        for files in f:
            if files.endswith('.UnitTests.vbproj'):
                path2 = os.path.split(files)
                print path2
                foundFiles.append(path2)
    return foundFiles

foundFiles [](步行后thruogh)=

[('', 'bg.APDS.UnitTests.vbproj')
('', 'bg.DatabaseAPI.UnitTests.vbproj')
('', 'bg.DataManagement.UnitTests.vbproj')
('', 'bg.FormControls.UnitTests.vbproj')]
('', 'Cooper.Geometry.UnitTests.vbproj')

到目前为止,我有这个功能。但是,findFiles中每个字符串中的前4个空格都有“'',”格式,我需要摆脱它。最好使用string.strip,或string.replace,还是其他任何方式?提前谢谢!

EDIT1:

def getUnitTest(path):
foundFiles = []

for r,d,f in os.walk(path):
    for files in f:
        if files.endswith('.UnitTests.vbproj'):
            path2 = os.path.split(files)
            print path2
            foundFiles.append(path2)
foundFiles2= [ str(value for value in file if value) for file in foundFiles]
return foundFiles2

这就是我到目前为止,它仍然没有摆脱第一个元组,我是否应该将值改为实际代表的值?对不起,如果这是一个愚蠢的问题,我仍然是一个新手程序员。

2 个答案:

答案 0 :(得分:0)

*.UnitTests.vbproj目录中查找path的更简单方法是使用glob

import os, glob

def getUnitTest(path):
    return glob.glob(os.path.join(path, "*.UnitTests.vbproj"))

并将每行打印出一个结果:

print "\n".join(getUnitTest(path));

答案 1 :(得分:0)

替换元组中的空格

你并没有试图摆脱字符串的一部分,你试图从元组中删除空字符串(foundFiles中有list tuples你可以这样做:

注意:由于元组是不可变的,我们无法在定义后编辑它们

foundFilesFixed = [str(value for value in file if value) for file in foundFiles]

这会将foundFiles中的所有元组值复制到foundFilesFixed,只要它们不是假(空白,空等)。

这将取代这个:

[
    ('', 'bg.APDS.UnitTests.vbproj')
    ('', 'bg.DatabaseAPI.UnitTests.vbproj')
    ('', 'bg.DataManagement.UnitTests.vbproj')
    ('', 'bg.FormControls.UnitTests.vbproj')
]

用这个:

[
    'bg.APDS.UnitTests.vbproj'
    'bg.DatabaseAPI.UnitTests.vbproj'
    'bg.DataManagement.UnitTests.vbproj'
    'bg.FormControls.UnitTests.vbproj'
]

我在这里假设你的所有元组都有两个值,一个是空的,一个是文件名。如果这些值可能包含多个值,则需要将我的函数中的str(更改为tuple(

替代方案:特定于应用

正如乔丹在评论中所指出的,对于你的例子,你可以这样做:

return [str(value[1]) for value in foundFiles]
然而,

而不是return foundFiles,这对未来的读者来说不太可能有用,所以不想把重点放在它上面。