Как заменить часть строки из списка строк, используя Python 2.7 - PullRequest
0 голосов
/ 28 августа 2018

У меня есть список уникальных путей к файлам, считанных из CSV-файла, и я хотел бы отфильтровать этот список несколькими способами. Одним из них является исключение путей, содержащих определенные слова. Я создал список слов, но я не уверен, как использовать его для фильтрации путей. Приведенный ниже код не работает.

with open("C:\MXD\dataSources.csv") as csvfile:
    pathList = csvfile.readlines()

vendMastList = ["Vendor", "vendor", "master", "Master"]
for pth in pathList:
    for vendMast in vendMastList:
        if vendMast not in pth:
            print pth

Ответы [ 4 ]

0 голосов
/ 28 августа 2018

Это немного сложно измерить без образца файла CSV, возможно, добавьте его в следующий раз. :) Я также не уверен, что вы путаетесь между чтением текстового файла, т. Е. readlines() или фактического файла CSV csv.reader(filename, delimiter="") из library 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, чтобы увидеть, каков выход для каждой ступени цикла и т. Д.

0 голосов
/ 28 августа 2018

Я думаю, все, что вам нужно сделать, это заменить второй цикл for:

for path in pathList:
    if not any(name in path
               for name in vendMastList): 
        print(path)

Это проверяет, есть ли в пути any слов в списке: и если этого не произойдет, выведите его

0 голосов
/ 28 августа 2018

Поскольку необходимо учитывать, что ни одно из слов не содержится в пути, использование флага для записи того, содержится ли какое-либо слово в пути, является наиболее интуитивным подходом. Исправьте это:

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
0 голосов
/ 28 августа 2018

Имея такой короткий список, вы можете просто проверить каждый из них.

for path in pathList:
    if not 'Vendor' in path and not 'vendor' in path and \ 
        not 'Master' in path and not 'Master' in path:

        print path

Если бы ваш список был длиннее, я бы просмотрел список каждой работы и использовал бы pop, чтобы удалить любой путь, содержащий слово. Документация для pop, list.pop (i) https://docs.python.org/3.1/tutorial/datastructures.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...