-1

你好,我对python相当陌生。我有一个给我的脚本。我希望能够识别列表中的空字符串。“打印文件列表”显示如下。这被认为是列表列表还是列表中的字符串?

['C:/test\\07072013_0001.zip']
['C:/test\\07072013_0006.zip']
[]
['C:/test\\07072013_00018.zip']

有数百个文件。我希望它直接在空 [] 上方打印 zip 的名称。可能有多个空。例如只打印:

['C:/test\\07072013_0006.zip']

我尝试了一个 for 循环,但这似乎只是绕过了空字符串,只列出了文件夹中存在的 zip 文件。感谢您的任何帮助。

实际输出:

=================================重新开始================= ================

['C:/Users/cb/Desktop/data/test\\07072013_0001.zip']
[]
['C:/Users/cb/Desktop/data/test\\08042013_0025.zip']
['C:/Users/cb/Desktop/data/test\\08042013_0031.zip']
['C:/Users/cb/Desktop/data/test\\08042013_0037.zip']
[]
['C:/Users/cb/Desktop/data/test\\08042013_0049.zip']
print type(fileList)
>>> ================================ RESTART ================================
>>> 
<type 'list'>
<type 'list'>
<type 'list'>
<type 'list'>
<type 'list'>
<type 'list'>
<type 'list'>
4

5 回答 5

1

这被认为是列表列表还是列表中的字符串?

这是列表列表。

[
[element], 
[element], 
[element], 
[element], 
]

字符串列表是这样的:

[
'element', 
'element', 
'element', 
'element', 
]

我尝试了一个 for 循环,但这似乎只是绕过了空字符串,只列出了文件夹中存在的 zip 文件。

请发布您迄今为止尝试过的内容,以及它给出的输出。我会用我可以建议的任何更正来编辑这个答案。

于 2013-08-06T16:22:01.640 回答
1

你可以itertools.izip在这里使用。itertools.izip返回一个迭代器,因此它是内存高效的,如果列表不是很大,那么您也可以使用内置函数zip

from itertools import izip, tee
lis = [['a'], [], ['b'], ['c'], [], [], ['d'], []]
it1, it2 = tee(lis)
next(it2)
for x, y in izip(it1, it2):
    if x and not y:
        print x

输出:

['a']
['c']
['d']
于 2013-08-06T16:24:16.620 回答
0

第一个解决方案

ref = [
    ['a'],
    ['b'],
    [],
    [],
    ['d'],
    ['e'],
    ['f'],
    ['g'],
    [],
    ['i'],
    [],
    ['k'],
    ['l']
]

results = [ref[index - 1] for (index,item) in enumerate(ref) if (not item and index > 0 and ref[index - 1])]

print results

输出:

[['b'], ['g'], ['i']]

第二种解决方案

ref = [
    ['a'],
    ['b'],
    [],
    ['d'],
    ['e'],
    ['f'],
    ['g'],
    [],
    [],
    ['i'],
    [],
    ['k'],
    ['l']
]


def test(l):
    for (index,item) in enumerate(ref):
        if not item and index > 0 and l[index - 1]:
            yield l[index - 1][0]

for i in test(ref):
    print i

# or
print list(test(ref))

输出:

b
g
i

['b', 'g', 'i']
于 2013-08-06T17:40:08.803 回答
0

您可以使用zip获取以前的文件名:

fileList = [['C:/test\\07072013_0001.zip'],
            ['C:/test\\07072013_0006.zip'],
            [],
            ['C:/test\\07072013_00018.zip'],
           ]

for file, prev in zip(fileList[1:],fileList):
    if not file:
        print prev

这打印出来:

['C:/test\\07072013_0006.zip']
于 2013-08-06T16:26:59.700 回答
0
# Old variable a replaced with fileList

for indx, x in enumerate(fileList):
        if len(x) == 0:
            if (indx > 0):
                print fileList[indx-1]     
于 2013-08-06T16:24:38.820 回答