如何使用Python 2.7从字符串列表中替换字符串的一部分

时间:2018-08-28 15:39:00

标签: python python-2.7 list

我有一个从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;

4 个答案:

答案 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行以查看循环等每个阶段的输出。