반응형
파일을 사전으로 변환하는 방법은 무엇입니까?
두 개의 열로 구성된 파일이 있습니다.
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
반응형
'development' 카테고리의 다른 글
WPF 사용자 정의 컨트롤에서 가져온 리소스와 로컬 리소스를 결합하는 방법 (0) | 2020.09.24 |
---|---|
Wireshark vs Firebug vs Fiddler-장단점? (0) | 2020.09.24 |
여러 번 붙여 넣기 (0) | 2020.09.24 |
django 1.4-오프셋 순진 및 오프셋 인식 날짜 시간을 비교할 수 없음 (0) | 2020.09.24 |
최대 프로세스 수로 Bash 스크립트 병렬화 (0) | 2020.09.24 |