簡體   English   中英

從 django 的列表中提取不區分大小寫的單詞

[英]Extracting case insensitive words from a list in django

我從 csv 文件中提取值並將它們存儲在列表中。 我遇到的問題是,除非完全匹配,否則不會提取元素/字符串。 我將如何 go 關於 Django/Python 中不區分大小寫的列表搜索?

def csv_upload_view(request):
    print('file is being uploaded')

    if request.method == 'POST':
        csv_file_name = request.FILES.get('file')
        csv_file = request.FILES.get('file')
        obj = CSV.objects.create(file_name=csv_file)
        result = []

        with open(obj.file_name.path, 'r') as f:
            f.readline()
            reader = csv.reader(f)
            #reader.__next__()
            for row in reader:
                data = str(row).strip().split(',')
                result.append(data)

                transaction_id = data[1]
                product = data[2]
                quantity = data[3]
                customer = data[4]
                date = parse_date(data[5])

                try:
                    product_obj = Product.objects.get(name__iexact=product)
                except Product.DoesNotExist:
                    product_obj = None
                
                print(product_obj)

    return HttpResponse()

編輯:

由於某種原因對我不起作用的原始代碼包含以下迭代:

for row in reader:
    data = "".join(row)
    data = data.split(';')
    data.pop()

它允許使用每行提取的字符串元素。 我采用將元素存儲在列表中的代碼 (results=[]) 的方式使得無法通過具有 Django 的產品模型訪問元素。 上面提到的數據提取迭代來自 Macbook,而我正在使用 Windows 11(wsl2 Ubuntu2204),這是需要區別對待 Excel 數據的原因嗎?

編輯 2:好的,我剛找到這個

如果您的導出文件注定要在 Macintosh 上使用,您應該選擇第二個 CSV 選項。 此選項會生成 CSV 文件,其中每個記錄(文件中的每一行)都以回車符終止,正如 Mac 所期望的那樣

所以我想我需要創建一個 Mac 格式的 csv 文件來使第一次迭代工作。 有沒有辦法讓 csv (Windows/Mac) 被同等對待? 類似於提到的 str(row).strip().lower().split(',') 建議?

如果您要做的只是簡單地搜索敏感的字符串大小寫那么您所要做的就是降低搜索和查詢的大小寫(或大寫)。

這是修改后的代碼

def csv_upload_view(request):
    print('file is being uploaded')

    if request.method == 'POST':
        csv_file_name = request.FILES.get('file')
        csv_file = request.FILES.get('file')
        obj = CSV.objects.create(file_name=csv_file)
        result = []

        with open(obj.file_name.path, 'r') as f:
            f.readline()
            reader = csv.reader(f)
            #reader.__next__()
            for row in reader:
                data = str(row).strip().lower().split(',')
                result.append(data)

                _, transaction_id, product, quantity, customer, date, *_ = data
                date = parse_date(date)

                try:
                    product_obj = Product.objects.get(name__iexact=product)
                except Product.DoesNotExist:
                    product_obj = None
                
                print(product_obj)

    return HttpResponse()

然后,當您嘗試存儲數據時,請確保將其存儲為小寫。

此外,不要在,上拆分 csv 文件。 而是使用 Python 的CSV庫打開 csv 文件,因為數據可能包含, . 確保更改csv.QUOTE以便它用"封裝所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM