(Если строка в переменной) оператор не отфильтровывает данные - PullRequest
0 голосов
/ 26 февраля 2020

Попытка отфильтровать данные, в строке которых нет 'P C', но, похоже, они ничего не перехватывают и просто переходят к другому. Не уверен, является ли csvRow хотя бы строкой, и, возможно, именно поэтому она не работает, но я только начал Python и не знаю, как это интерпретировать.

Пример данных, возвращаемых csvRow:

['0', '0', '30', 'Testing Unit', 'True', 'COMP_PC', 'COMP_PC']
['0', '0', '30', 'Prod Unit', 'True', 'ASSM_UL', 'ASSM_UL']

Код:

for csvRow in reader(csvRows[2:]):

    if "PC" in csvRow: 
        for csvValue in csvRow:
            values += csvValue + "\t"
        values = values[:-1] + "\r\n"
    else:
        continue

Редактировать:

Решил для этого решение, хотя я не уверен, что оно вообще эффективно. Любые советы?

for csvRow in reader(csvRows[2:]):
    for csvValue in csvRow:
        if "PC" in csvValue: 
            for csvValue2 in csvRow:
                values += csvValue2 + "\t"
            values = values[:-1] + "\r\n"
            break
        else:
            continue

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Даже если вы хотите использовать альтернативный разделитель (например, \t вместо ,), все равно будет хорошей идеей использовать модуль csv . Это позволит лучше генерировать правильно сформированный вывод.

Вот пример:

import csv
import io

# Representing csvRows as a 2D array, hopefully approximating your input.
csvRows = [
    ['0', '0', '30', 'Testing Unit', 'True', 'COMP_PC', 'COMP_PC'],
    ['0', '0', '30', 'Prod Unit', 'True', 'ASSM_UL', 'ASSM_UL'],
]

# Using a StringIO instance to capture the output, alternatively you
# can easily write to a file.
results = io.StringIO()
writer = csv.writer(results, delimiter='\t')

# Process your data.
for row in csvRows:
    if any('PC' in value for value in row):
        writer.writerow(row)

# Print the results.
output = results.getvalue()
print(output)

# Use repr() to verify that each line is terminated with '\r\n'.
print(repr(output))

Вывод:

$ python3 example.py
0       0       30      Testing Unit    True    COMP_PC COMP_PC

'0\t0\t30\tTesting Unit\tTrue\tCOMP_PC\tCOMP_PC\r\n'
0 голосов
/ 26 февраля 2020

Понял, как сказал фура:

"PC" in string может проверить, является ли "P C" частью более длинной строки. "PC" in list проверяет, есть ли в списке точная строка "P C", но не может проверить, является ли "P C" частью более длинной строки в этом списке.

Просто пришлось перебрать список и проверить там.

for csvRow in reader(csvRows[2:]):
    for csvValue in csvRow:
        if "PC" in csvValue: 
            for csvValue2 in csvRow:
                values += csvValue2 + "\t"
            values = values[:-1] + "\r\n"
            break
        else:
            continue
...