если l oop не заканчивается после возврата - PullRequest
0 голосов
/ 18 марта 2020

пользователей,

Я ломаю голову много часов, почему мой код не работает.

Я получаю данные из файла CSV, и я пытаюсь измените одно значение, когда совпадут два кода.

def mode(x):
for line in data_df['Bar_Code']:
    #print(line) ~ Line outputs the Barcodes in the Bar_Code Column of the CSV file.
    with open("Barcodes_to_match.txt") as barcodes:
        for barcode in barcodes:
            #print(barcode) ~ Outputs the Barcode that it need to be matched.
            if barcode == line:
                x = x.replace("True", "False")
                return x

data_df['Published'] = data_df['Published'].apply(lambda x: mode(x))

data_df.to_csv(('Products.csv'), encoding='UTF-8', quoting=csv.QUOTE_ALL, quotechar='"', index=None, sep=str(","))

Файл Product.csv:

Bar_Code, Product, Published
BLA00BLA00, Product1, True
BLU00BLU00, Product2, False
BLI00BLI00, Product3, True
BLE00BLE00, Product4, False

Barcodes_to_match.txt:

BLA00BLA00
BLI00BLI00

Итак, мне нужно изменить значения для Product строк (BLA00BLA00 и BLI00BLI00) Опубликованный столбец на False

Может ли кто-нибудь проверить мой метод для замены значений?

Спасибо!

Редактировать: Когда я добавляю команду печати, кажется, что код запакован в последний матч в бесконечном l oop.

if barcode == line:
   print(barcode + " = " + line)
   x = x.replace("True", "False")
   return x

Output:
BLI00BLI00 = BLI00BLI00
BLI00BLI00 = BLI00BLI00
BLI00BLI00 = BLI00BLI00
BLI00BLI00 = BLI00BLI00
BLI00BLI00 = BLI00BLI00
BLI00BLI00 = BLI00BLI00
BLI00BLI00 = BLI00BLI00
BLI00BLI00 = BLI00BLI00

1 Ответ

0 голосов
/ 18 марта 2020

Я не смог заставить ваш код работать, чтобы достичь того, что вы хотели, попробуйте это:

import csv
import pandas as pd

data_df = pd.read_csv('Products.csv')
print(data_df)

with open("Barcodes_to_match.txt") as f:
    barcodes = f.read().splitlines()

data_df.loc[data_df['Bar_Code'].isin(barcodes), 'Published'] = False

print(data_df)

data_df.to_csv(('Products.csv'), encoding='UTF-8', quoting=csv.QUOTE_ALL, quotechar='"', index=None, sep=str(","))

Products.csv

"Bar_Code","Product","Published"
"BLA00BLA00","Product1","False"
"BLU00BLU00","Product2","False"
"BLI00BLI00","Product3","False"
"BLE00BLE00","Product4","False"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...