Python - String bölmə xətləri

 add_numbers( "A1", "Element 560234 65952 6598881 20203256 2165883 659562 654981 24120 261240 31648948 23900 5512400 5512900 5612400 5612900" ) add_numbers( "A2", "Element 261240 31659 5612400 76803256 3165883 659863 654224 44120 261240 31648948 23900 3612200 9512900 5612400 5642924" ) add_numbers( "A3", "Element 841225 65952 2165883 63103256 2165883 644861 344966 84120 161540 31653948 23900 5513426 5518906 5682405 8682932" ) 

Bir yuxarıdakı xəttdən bir txt faylı olan bir lüğət almaq istəyirəm:

 {A1: 560234, 65952,6598881, 20203256,2165883, 659562,....} {A2: 261240 31659 5612400,....} {A3: 841225 65952 2165883,....} 

Hər hansı fikiriniz varmı? Bunu necə edə bilərəm? Təşəkkür edirik.

-13
17 мая '13 в 11:17 2013-05-17 11:17 Tikey 17 May 'da 11:17' də soruşdu 2013-05-17 11:17
@ 2 cavablar

Bunu başa düşmək istədiyiniz şeyi anlayın

 add_numbers( "A1", "Element 560234 65952 6598881 20203256 2165883 659562 654981 24120 261240 31648948 23900 5512400 5512900 5612400 5612900" ) add_numbers( "A2", "Element 261240 31659 5612400 76803256 3165883 659863 654224 44120 261240 31648948 23900 3612200 9512900 5612400 5642924" ) add_numbers( "A3", "Element 841225 65952 2165883 63103256 2165883 644861 344966 84120 161540 31653948 23900 5513426 5518906 5682405 8682932" ) 

bir lüğətdə mətn faylının mətn məzmunu kimi, mən bunu belə edərdim:

 import re // import regular expression module d = {} for line in open("myfile.txt", "r"): if not line.strip(): continue // Skip blank lines data = re.findall('"([^"]*)"', line) // Extract text between double quotes if len(data) != 2: continue // There were not exactly two pairs of double quotes, skip this line key, value = data d[key] = map(int, value.split()[1:]) // Remove "Element" and convert numbers to integers, add to dictionary 

Normal sözün izahı "([^"]*)" :

  • "( )" quotes içərisindəki şeyi uyğunlaşdırır
  • [^"]* 0 və ya daha çox simvol olan "

re.findall nəticələri nəticələri siyahısına qaytaracaq.

redaktə etmək

Səhv mesaj alıram. ValueError: açmaq üçün 1-dən çox dəyər tələb olunur

Dosyanıza iki cüt cüt tırnak içermeyen bir dize olmalıdır. Texniki xarakterinizə uyğun olmayan xəttləri yox saymaq üçün yuxarıdakı kodu yeniləmişəm.

5
17 мая '13 в 11:30 2013-05-17 11:30 Cavab İordaniya Trüft tərəfindən 17 May '13, saat 11:30 'da verilir 2013-05-17 11:30
 import re,ast def add_numbers(d,key,elements): #we pass in a reference to a dict, which we update d[key] = map(int,elements.split()[1:]) #Returns ["Element",...], so we select all but first [1:] dic = {} with open('file.txt') as f: for line in f: key,elems = ast.literal_eval(re.search(r'\((.+)\)',line).group(0)) add_numbers(dic,key,elems) 

İstehsal edir

border=0
 >>> {'A1': [560234, 65952, 6598881, 20203256, 2165883, 659562, 654981, 24120, 261240, 31648948, 23900, 5512400, 5512900, 5612400, 5612900], 'A3': [841225, 65952, 2165883, 63103256, 2165883, 644861, 344966, 84120, 161540, 31653948, 23900, 5513426, 5518906, 5682405, 8682932], 'A2': [261240, 31659, 5612400, 76803256, 3165883, 659863, 654224, 44120, 261240, 31648948, 23900, 3612200, 9512900, 5612400, 5642924]} 
5
17 мая '13 в 11:27 2013-05-17 11:27 Cavab HennyH tərəfindən 17 May 'da verildi 11:27 2013-05-17 11:27

Tags haqqında digər suallar və ya bir sual