मैं एक टेक्स्ट फ़ाइल के माध्यम से दो लूप की कोशिश कर रहा हूं और एक ताना बना रहा हूं जिसमें dict[line_index]=word_index_position है जिसका अर्थ है कि कुंजी लाइन नंबर है और मान उस पंक्ति के सभी शब्द हैं। लक्ष्य एक "मैट्रिक्स" बनाना है ताकि उपयोगकर्ता बाद में x, y निर्देशांक (लाइन, word_index_position) निर्दिष्ट करने में सक्षम हो और उन निर्देशांक में एक शब्द पुनर्प्राप्त कर सके, यदि कोई हो (सुनिश्चित नहीं है कि यह कैसा चल रहा है) एक निर्देश के साथ काम करें, क्योंकि इसका आदेश नहीं दिया गया है)। नीचे ताना बनाने के लिए लूप है।

try:
    f = open("file.txt", "r")
except Exception as e:
    print("Skriv in ett korrekt filnamn")
uppslag = dict()
num_lines = 0

for line in f.readlines():
    num_lines += 1
    print(line)
    for word in line.split():
        print(num_lines)
        print(word)
        uppslag[num_lines] = word
f.close()
uppslag

लूप काम करता है जैसा कि माना जाता है, लेकिन uppslag[num_lines] = word प्रत्येक पंक्ति में केवल अंतिम शब्द संग्रहीत करता है। किसी भी मार्गदर्शन की अत्यधिक सराहना की जाएगी।

बहुत धन्यवाद,

-1
MisterButter 25 जिंदा 2020, 17:31

3 जवाब

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

word को ओवरराइट करने के बजाय:

for word in line.split():
    print(num_lines)
    print(word)
    uppslag[num_lines] = word

आप पूरी लाइन को सहेजने से बेहतर हो सकते हैं:

uppslag[num_lines] = line.split()

इस तरह आप चौथी पंक्ति में तीसरा शब्द इस प्रकार ढूंढ पाएंगे:

uppslag[4][3]
1
lenik 25 जिंदा 2020, 17:38

शब्दकोश, या .readlines() की कोई आवश्यकता नहीं है।

with open("file.txt") as words_file:
    words = [line.split() for line in words_file]
0
AMC 26 जिंदा 2020, 01:30

uppslag[num_lines] = word कुंजी num_lines के लिए हर बार कॉल किए जाने पर शब्दकोश प्रविष्टि को अधिलेखित कर रहा है। आप सभी शब्दों को रखने के लिए एक सूची का उपयोग कर सकते हैं:

for line in f:
    num_lines += 1
    print(line)

    uppslag[num_lines] = []  # initialize dictionary entry with empty list

    for word in line.split():
        print(num_lines, word)

        uppslag[num_lines].append(word) # add new word to list

आप उसी कोड को अधिक कॉम्पैक्ट रूप में लिख सकते हैं, क्योंकि line.split() पहले से ही एक सूची देता है:

for line_number, line in enumerate(f):
    uppslag[line_number] = line.split()

यदि प्रत्येक पंक्ति पर एक शब्द है (यानी लाइन इंडेक्स निरंतर रहेगा) तो आप एक शब्दकोश के बजाय एक सूची का उपयोग कर सकते हैं, और अपने कोड को एक-पंक्ति सूची समझ में कम कर सकते हैं:

uppslag = [line.split() for line in f]
1
IonicSolutions 26 जिंदा 2020, 16:23