我有一个从csv文件读取的唯一文件路径的列表,我想通过多种方法来过滤此列表。其中之一是排除包含特定单词的路径。我已经创建了一个单词列表,但是我不确定如何使用它来过滤路径。下面的代码不起作用。
data want;
set have;
*declare array variables to hold flags;
array flags(2000:2018) flag2000-flag2018;
*set to missing to avoid carry over from previous line;
call missing(of flags(*));
*calculate start and end years based on dates;
year_start =year(sdate);
year_end = year(enddate);
*loop and set years to 1 between year start and end;
do year=year_start to year_end;
flags(year) = 1;
end;
run;
答案 0 :(得分:2)
我认为您需要做的就是替换第二个for循环:
for path in pathList:
if not any(name in path
for name in vendMastList):
print(path)
这将检查列表中单词中的any
是否出现在路径中:如果没有出现,则将其打印出来
答案 1 :(得分:0)
如果列表很短,您可以只检查其中的每一个。
timestamp name count(name)
------------------- ---- -----------
2010-11-16 10:30:03 John 3
如果您的列表较长,那么我将遍历每个作品的列表,并使用pop删除包含该单词的所有路径。 pop,list.pop(i)https://docs.python.org/3.1/tutorial/datastructures.html
的文档答案 2 :(得分:0)
由于您需要考虑路径中不包含任何单词,因此使用标记来记录路径中是否包含某些单词是最直观的方法。 修复它:
with open("C:\MXD\dataSources.csv") as csvfile:
pathList = csvfile.readlines()
vendMastList = ["Vendor", "vendor", "master", "Master"]
for pth in pathList:
contained = False
for vendMast in vendMastList:
if vendMast in pth:
contained = True
break
if not contained:
print pth
答案 3 :(得分:0)
如果没有csv文件样本,这很难衡量,也许下次再添加。 :)我也不确定在读取文本文件readlines()
或从csv.reader(filename, delimiter="")
读取文件library csv
到实际的csv文件import csv
之间是否混淆不清作为列和行。第一行将组成列,其余的行。
如果您希望像在readlines()
中那样将其读取为文本文件,那么您将需要执行以下操作:
with open("C:\MXD\dataSources.csv") as csvfile:
pathList = csvfile.read().splitlines() # removes newlines "\n" characters
vendMastList = ["Vendor", "vendor", "master", "Master"]
for line in pathList:
# print(line) # to see what is happening
result = line.split(",")
# print(result) # etc
for i in range(len(result)):
for j in range(len(vendMastList)):
if result[i] != vendMastList[j]:
new_result = result
print(new_result)
csvfile.close # Don't forget to close it :)
如果不确定情况如何,请插入print
行以查看循环等每个阶段的输出。