हैलो, मैं लूप के लिए पायथन (3.8.2) का उपयोग कर रहा हूं, डीवीडी की इस सूची के साथ एक परिवार के सदस्य ने मुझे दिया है, सभी इस प्रकार व्यवस्थित हैं:

A Walk Among the Tombstones (2014)
Blithe Spirit (2020)
Jeepers Creepers (2001)
The Place Beyond the Pines (2012)

आदि....

खोज कोड:

inp = input().lower().title()
if inp in movieTitle:
    print(inp+ " DVD is AVAILABLE")
else:
    print("THIS DVD IS NOT AVAILABLE")

शीर्षक/वर्ष निकालने के लिए कोड:

for lin in L:
    movieName = re.findall('(^.*)\s', lin)
    movieTitle.append(movieName)
    movieYr = re.findall('(\(....\))$', lin)
    movieYear.append(movieYr)

नोट: ('L' .txt फ़ाइल की स्ट्रिंग से बनाई गई मूल सूची है)

मैं मौजूदा शीर्षकों की जांच के लिए उपयोगकर्ता इनपुट के माध्यम से एक खोज बना रहा हूं। मैं re.findall का उपयोग करके डीवीडी के केवल शीर्षकों को पुनर्प्राप्त करने में सफल रहा हूं ताकि उपयोगकर्ता इनपुट आसानी से शीर्षक से मेल खाता हो (अन्यथा यह कोष्ठक में वर्ष दर्ज किए बिना अस्तित्वहीन के रूप में दिखाई देगा)।

मेरे पास जो मुद्दा है वह यह है कि एक बार जब मैं सिर्फ शीर्षक निकालता हूं, तो अब मेरे पास एक सूची है जिसमें मैं एक कुंजी के रूप में एक शब्दकोश में नहीं जोड़ सकता। फिल्म के वर्षों को मैंने अलग से भी निकाला है, और जिन्हें मैं मूल्य के रूप में जोड़ना चाहता हूं।

मेरे पास कई "अनहैशेबल टाइप" सूची त्रुटियां हैं और इसी तरह की स्थिति के बारे में कई पोस्ट की समीक्षा की है। जहां मेरी स्थिति संबंधित नहीं लगती है, वह यह है कि मेरे शीर्षकों में कुछ शीर्षकों के साथ-साथ कई पंक्ति वस्तुओं के लिए रिक्त स्थान और कई शब्द हैं।

कृपया सलाह दें कि मैं इसे दूसरे तरीके से कैसे प्राप्त कर सकता हूं; धन्यवाद और चीयर्स~

-1
ArtimusMaximus 28 सितंबर 2021, 12:57
आपको किस कोड को ठीक करने की आवश्यकता है? कृपया इसे प्रश्न में जोड़ें। केवल प्रासंगिक जानकारी को प्रश्न में रखें। यह स्पष्ट नहीं है कि Search code यहाँ क्या करता है।
 – 
Wiktor Stribiżew
28 सितंबर 2021, 13:00
नमस्ते विक्टर। मेरी समस्या यह थी कि मैं अपने re.findall से "सूचियाँ" लौटा रहा था, जिसके साथ मैं एक शब्दकोश बनाने में असमर्थ था। मैं जो अनुरोध कर रहा था वह मेरी मूवी सूची से अपना डेटा निकालने के लिए एक संभावित वैकल्पिक दृष्टिकोण था, जबकि अभी भी निकाले गए डेटा के साथ एक शब्दकोश बनाने में सक्षम था। सज्जनों लेडी केसली ने मेरी पूछताछ को पढ़ लिया है और उचित समाधान की सलाह दी है।
 – 
ArtimusMaximus
29 सितंबर 2021, 09:10

1 उत्तर

सबसे बढ़िया उत्तर

re.findall एक list लौटाएगा ताकि आप उसे शब्दकोश कुंजी के रूप में उपयोग न कर सकें। आप re.search और सही खोज समूह का उपयोग कर सकते हैं। उदाहरण के लिए:

import re

with open("your_file.txt", "r") as f_in:
    L = f_in.readlines()


movies = {}
for lin in L:
    movieName = re.search(r"^([^(]+)", lin).group(1).strip()
    movieYr = re.search(r"\((\d+)\)$", lin).group(1)
    movies[movieName] = movieYr

inp = input("Search for movie: ").lower().title()

if inp in movies:
    print(inp + " DVD is AVAILABLE")
else:
    print("THIS DVD IS NOT AVAILABLE")

प्रिंट:

Search for movie: Blithe Spirit
Blithe Spirit DVD is AVAILABLE

movies शब्दकोश है:

{
    "A Walk Among the Tombstones": "2014",
    "Blithe Spirit": "2020",
    "Jeepers Creepers": "2001",
    "The Place Beyond the Pines": "2012",
}
0
Andrej Kesely 28 सितंबर 2021, 13:40
1
आह वाह, धन्यवाद लेडी! मुझे इस बात का एहसास नहीं था कि खोज के बजाय re.search का उपयोग करके मैं परिणामों को सूचियां बनने से बचा पाऊंगा। उसके लिये आपका धन्यवाद। इसके अलावा, मैंने अपने री के आपके पुनर्विक्रय का आनंद लिया, मैं अगली बार कच्चे तारों के लिए "आर" को ध्यान में रखूंगा। महान सामान। यदि आप विस्तृत करने में सक्षम हैं; टेक्स्ट फ़ाइल को "with" "as" बनाम केवल x = open ('text.txt') के माध्यम से खोलने का क्या फायदा है, फिर x में लाइन के लिए?
 – 
ArtimusMaximus
29 सितंबर 2021, 09:01
with के साथ फाइल अपने आप बंद हो जाती है। संसाधनों के उपयोग के बाद उन्हें साफ करना आम तौर पर अच्छा अभ्यास है (with इसे स्वचालित रूप से करें)
 – 
Andrej Kesely
29 सितंबर 2021, 10:52
1
@ Andrej Kesely जानकारी का एक और रत्न, धन्यवाद Andrej, ऐसा लगता है कि मेरे पास भरने से निपटने का एक नया और पसंदीदा तरीका है। मेरा प्रोजेक्ट भी आगे बढ़ रहा है, फिर से धन्यवाद!
 – 
ArtimusMaximus
29 सितंबर 2021, 23:40