development

파일을 사전으로 변환하는 방법은 무엇입니까?

big-blog 2020. 9. 24. 08:00
반응형

파일을 사전으로 변환하는 방법은 무엇입니까?


두 개의 열로 구성된 파일이 있습니다.

1 a 
2 b 
3 c

열 1이 키이고 열 2가 값이되도록이 파일을 사전에 읽고 싶습니다. 즉,

d = {1:'a', 2:'b', 3:'c'}

파일이 작기 때문에 효율성은 문제가되지 않습니다.


d = {}
with open("file.txt") as f:
    for line in f:
       (key, val) = line.split()
       d[int(key)] = val

그러면 키가 문자열로 남습니다.

with open('infile.txt') as f:
  d = dict(x.rstrip().split(None, 1) for x in f)

파이썬 버전이 2.7 이상인 경우 다음 과 같은 사전 이해를 사용할 수도 있습니다 .

with open('infile.txt') as f:
  {int(k): v for line in f for (k, v) in (line.strip().split(None, 1),)}

def get_pair(line):
    key, sep, value = line.strip().partition(" ")
    return int(key), value

with open("file.txt") as fd:    
    d = dict(get_pair(line) for line in fd)

IMHO는 생성기를 사용하기 위해 좀 더 비단뱀 적입니다 (아마도 2.7 이상이 필요합니다) :

with open('infile.txt') as fd:
    pairs = (line.split(None) for line in fd)
    res   = {int(pair[0]):pair[1] for pair in pairs if len(pair) == 2 and pair[0].isdigit()}

또한 정수로 시작하지 않거나 정확히 두 항목을 포함하지 않는 행을 필터링합니다.


import re

my_file = open('file.txt','r')
d = {}
for i in my_file:
  g = re.search(r'(\d+)\s+(.*)', i) # glob line containing an int and a string
  d[int(g.group(1))] = g.group(2)

하나의 라이너를 좋아한다면 다음을 시도하십시오.

d=eval('{'+re.sub('\'[\s]*?\'','\':\'',re.sub(r'([^'+input('SEP: ')+',]+)','\''+r'\1'+'\'',open(input('FILE: ')).read().rstrip('\n').replace('\n',',')))+'}')

입력 파일 = 파일 경로, SEP = 키-값 구분 문자

가장 우아하거나 효율적인 방법은 아니지만 그럼에도 불구하고 매우 흥미 롭습니다. :)


다른 옵션이 있습니다 ...

events = {}
for line in csv.reader(open(os.path.join(path, 'events.txt'), "rb")):
    if line[0][0] == "#":
        continue
    events[line[0]] = line[1] if len(line) == 2 else line[1:]

참고URL : https://stackoverflow.com/questions/4803999/how-to-convert-a-file-into-a-dictionary

반응형