복붙노트

[PYTHON] 파이썬으로 목록이나 배열로 텍스트 파일을 읽는 법

PYTHON

파이썬으로 목록이나 배열로 텍스트 파일을 읽는 법

텍스트 파일의 줄을 파이썬의 목록이나 배열로 읽으려고합니다. 목록이나 배열을 만든 후에 개별적으로 항목에 액세스 할 수 있어야합니다.

텍스트 파일의 형식은 다음과 같습니다.

0,0,200,0,53,1,0,255,...,0.

The ...이 위의 경우, 실제 텍스트 파일에는 수백 또는 수천 개의 항목이 더 있습니다.

다음 코드를 사용하여 파일을 목록으로 읽으려고합니다.

text_file = open("filename.dat", "r")
lines = text_file.readlines()
print lines
print len(lines)
text_file.close()

얻을 출력은 다음과 같습니다.

['0,0,200,0,53,1,0,255,...,0.']
1

분명히 개별 파일 목록이 아닌 단지 하나의 항목 목록으로 전체 파일을 읽는 것입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

해결법

  1. ==============================

    1.split ()을 사용하여 문자열을 값 목록으로 분할해야합니다.

    split ()을 사용하여 문자열을 값 목록으로 분할해야합니다.

    그래서,

    lines = text_file.read().split(',')
    
  2. ==============================

    2.python file.readLines () 메서드는 파일의 행 목록을 반환합니다.

    python file.readLines () 메서드는 파일의 행 목록을 반환합니다.

    f = open('file_name.ext', 'r')
    x = f.readlines()
    f.close()
    

    이제 x의 배열을 반복 할 수 있어야합니다.

    파일을 사용하고 나중에 닫아야한다는 것을 기억하지 않으려면 다음과 같이하십시오.

    with open('file_name.ext', 'r') as f:
        x = f.readlines()
    
  3. ==============================

    3.numpy loadtxt를 다음과 같이 사용할 수도 있습니다.

    numpy loadtxt를 다음과 같이 사용할 수도 있습니다.

    from numpy import loadtxt
    lines = loadtxt("filename.dat", comments="#", delimiter=",", unpack=False)
    
  4. ==============================

    4.목록의 목록을 만들고 싶습니다 ... 빈 목록으로 시작해야합니다.

    목록의 목록을 만들고 싶습니다 ... 빈 목록으로 시작해야합니다.

    list_of_lists = []
    

    다음으로 파일 내용을 한 줄씩 읽습니다.

    with open('data') as f:
        for line in f:
            inner_list = [elt.strip() for elt in line.split(',')]
            # in alternative, if you need to use the file content as numbers
            # inner_list = [int(elt.strip()) for elt in line.split(',')]
            list_of_lists.append(inner_list)
    

    일반적인 사용 사례는 기둥 형 데이터의 경우이지만 저장소의 단위는 우리가 하나씩 읽은 파일의 행, 그래서 당신은 전치하고자 할 수 있습니다 목록의 목록. 이것은 다음 관용구를 사용하여 수행 할 수 있습니다.

    by_cols = zip(*list_of_lists)
    

    또 다른 일반적인 용도는 각 열에 이름을 지정하는 것입니다

    col_names = ('apples sold', 'pears sold', 'apples revenue', 'pears revenue')
    by_names = {}
    for i, col_name in enumerate(col_names):
        by_names[col_name] = by_cols[i]
    

    균질 데이터 항목을 조작 할 수 있습니다.

     mean_apple_prices = [money/fruits for money, fruits in
                         zip(by_names['apples revenue'], by_names['apples_sold'])]
    

    필자가 작성한 대부분은 표준 라이브러리의 csv 모듈을 사용하여 속도를 높일 수 있습니다. 또 다른 타사 모듈은 판다 (pandas)로, 일반적인 데이터 분석의 대부분의 측면을 자동화 할 수 있습니다 (그러나 많은 의존성이 있습니다).

    업데이트 Python 2에서 zip (* list_of_lists)은 목록의 다른 목록을 반환하지만 Python 3에서는 zip (* list_of_lists)가 subscriptable이 아닌 zip 객체를 반환합니다.

    인덱싱 된 액세스가 필요한 경우 사용할 수 있습니다.

    by_cols = list(zip(*list_of_lists))
    

    두 버전의 Python에서 모두리스트를 얻을 수 있습니다.

    반면에 인덱스 된 액세스가 필요하지 않고 원하는 항목이 열 이름으로 인덱싱 된 사전을 작성하는 것만으로도 zip 객체가 좋습니다 ...

    file = open('some_data.csv')
    names = get_names(next(file))
    columns = zip(*((x.strip() for x in line.split(',')) for line in file)))
    d = {}
    for name, column in zip(names, columns): d[name] = column
    
  5. ==============================

    5.이 질문은 쉼표로 구분 된 값의 내용을 파일에서 반복 가능한 목록으로 읽는 방법을 묻습니다.

    이 질문은 쉼표로 구분 된 값의 내용을 파일에서 반복 가능한 목록으로 읽는 방법을 묻습니다.

    0,0,200,0,53,1,0,255,...,0.

    이렇게하는 가장 쉬운 방법은 다음과 같은 csv 모듈을 사용하는 것입니다.

    import csv
    with open('filename.dat', newline='') as csvfile:
        spamreader = csv.reader(csvfile, delimiter=',')
    

    이제 다음과 같이 스팸 판독기를 쉽게 반복 할 수 있습니다.

    for row in spamreader:
        print(', '.join(row))
    

    자세한 예제는 설명서를 참조하십시오.

  6. ==============================

    6.

    with open('D:\python\positive.txt', 'r') as myfile: data=myfile.read().replace('\n', '')
    
  7. from https://stackoverflow.com/questions/14676265/how-to-read-a-text-file-into-a-list-or-an-array-with-python by cc-by-sa and MIT license