在python3.x中,从文件名的切片部分创建列表

2024-03-29 08:57:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在文件夹里有一些这样名字的文本文件

80010867\u 0698\u X\u CO\u P45\u 02T\u R1
80010867\u 0698\u X\u CO\u P45\u 03T\u R1
80010867\u 0698\u X\u CO\u P45\u 04T\u R1
80010867\ U 0698\ U X\ U CO\ U P45\ U 05T\ U R1

我想使用引用的条件删除一些文件 文件名的一部分,然后我进一步处理文件。这个想法是 从文件名切片的项目中生成整数列表。你知道吗

兴趣代码部分

path = 'D:\Radio Access\Tools\Atoll\Antenna patterns\pattern\pattern'
for filename in glob.glob(os.path.join(path,'*.msi')): 
    freqcheck = filename[-21:-17]
    f = int(freqcheck)    
    if 698 <= f <= 790:          
        lte700 = []
        lte700.append(f)
        print(lte700)

如果我运行代码,就会得到这样的输出

[698]   [698]   [698]   [698]   [698]   [698]   [698]  

但我真正想要的是

[[698],[698],[698],[698],[698]]  

我尝试过很多方法,包括extend(),sum(),但是在处理“type int not iterable”时出现了错误。你知道吗


Tags: 文件path代码文件夹文件名filename名字glob
2条回答

你错过的是

1)lte700 = []在for循环中定义了空列表。它应该在for循环之前和外部。你知道吗

2)在forloop后放置打印位置

path = 'D:\Radio Access\Tools\Atoll\Antenna patterns\pattern\pattern'
lte700 = []
for filename in glob.glob(os.path.join(path,'*.msi')): 
    freqcheck = filename[-21:-17]
    f = int(freqcheck)    
    if 698 <= f <= 790:                      
        lte700.append(f)
print(lte700)

所以这会给你

[698, 698, 698, 698, 698]

如果你愿意

[[698],[698],[698],[698],[698]]  this means

更改附加lte700.append([f])

您正在清除每个文件的列表lte700 = []。您需要在循环外声明它:

path = 'D:\Radio Access\Tools\Atoll\Antenna patterns\pattern\pattern'
lte700 = []
for filename in glob.glob(os.path.join(path,'*.msi')): 
    freqcheck = filename[-21:-17]
    f = int(freqcheck)    
    if 698 <= f <= 790:          
        lte700.append(f)
print(lte700)

另外,如果您真的想要一个列表列表(内部列表只有一个项目),请附加一个值为lte700.append([f])的列表

相关问题 更多 >