>
Filesystem           Type       1K-blocks      Used Available Use% Mounted on
/dev/sda             ext4          245671     47009    181459  21% /initlo
/dev/loop7           squashfs       39552     39552         0 100% /
none                 tmpfs          65536      1064     64472   2% /tmp
none                 aufs           65536      1064     64472   2% /dev
none                 tmpfs         510184        24    510160   0% /dev/shm
none                 aufs           65536      1064     64472   2% /etc
none                 aufs           65536      1064     64472   2% /var
none                 aufs           65536      1064     64472   2% /www
none                 aufs           65536      1064     64472   2% /mcl
none                 aufs           65536      1064     64472   2% /eds

사전을 생성하고 싶을 때 (키를 테이블의 헤더로 사용하고 값은 각 열에 따라야 함) 이 사전을 만드는 데 도움을주십시오. 표 그림을 보려면 링크를 클릭하십시오.


  • 답변 # 1

    출력은 탭으로 구분 된 문자열/탭으로 구분 된 문자열 목록 인 것 같습니다. 전체 문자열을 문자열 목록으로 변경합니다

    def make_dict(input_list):
        final_output = []
        headers = input_list[0].strip().split("\t")
        for line in input_list[1:]:
            line = line.strip().split("\t")
            final_output.append({key: value for key,value in zip(headers, line)} )
        return final_output
    Input_str = """Filesystem           Type       1K-blocks      Used Available Use% 
    Mounted on
    /dev/sda             ext4          245671     47009    181459  21% /initlo
    /dev/loop7           squashfs       39552     39552         0 100% /
    none                 tmpfs          65536      1064     64472   2% /tmp
    none                 aufs           65536      1064     64472   2% /dev
    none                 tmpfs         510184        24    510160   0% /dev/shm
    none                 aufs           65536      1064     64472   2% /etc
    none                 aufs           65536      1064     64472   2% /var
    none                 aufs           65536      1064     64472   2% /www
    none                 aufs           65536      1064     64472   2% /mcl
    none                 aufs           65536      1064     64472   2% /eds
    """
    input_list = Input_str.split("\n")
    print(make_dict(input_list))
    
    

    출력 :

      [{'Filesystem': '/dev/sda', 'Type': '', '1K-blocks': 'ext4', 'Used': ' 245671', 'Available': '47009', 'Use%': '181459', 'Mounted on': '21%'}, {'Filesystem': '/dev/loop7', 'Type': 'squashfs', '1K-blocks': '39552', 'Used': '39552', 'Available': '0', 'Use%': '100%', 'Mounted on': '/'}, {'Filesystem': 'none', 'Type': 'tmpfs', '1K-blocks': ' 65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%', 'Mounted on': '/tmp'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%', 'Mounted on': '/dev'}, {'Filesystem': 'none', 'Type': 'tmpfs', '1K-blocks': '510184', 'Used': '', 'Available': '24', 'Use%': '510160', 'Mounted on': '0%t/dev/shm'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%', 'Mounted on': '/etc'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%', 'Mounted on': '/var'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%', 'Mounted on': '/www'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%', 'Mounted on': '/mcl'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%', 'Mounted on': '/eds'}]
    
    

  • 답변 # 2

    @Rishikesh Jha (감사)에서 영감을 얻어 제안 된 답변은 다음과 같습니다 (팬더와 같은 고급 라이브러리를 사용하지 않고) :

    import re
    INPUT = """Filesystem           Type       1K-blocks      Used Available Use%
    Mounted on
    /dev/sda             ext4          245671     47009    181459  21% /initlo
    /dev/loop7           squashfs       39552     39552         0 100% /
    none                 tmpfs          65536      1064     64472   2% /tmp
    none                 aufs           65536      1064     64472   2% /dev
    none                 tmpfs         510184        24    510160   0% /dev/shm
    none                 aufs           65536      1064     64472   2% /etc
    none                 aufs           65536      1064     64472   2% /var
    none                 aufs           65536      1064     64472   2% /www
    none                 aufs           65536      1064     64472   2% /mcl
    none                 aufs           65536      1064     64472   2% /eds
    """
    def split_spaces(s):
        "Split a string into a list, using spaces/tabs as separators"
        return re.split('\s+', s.strip())
    def make_dict(input):
        "Convert a string containing a table into a list of dictionaries"
        input_list = input.splitlines()
        output_list = []
        # get the keys:
        keys = split_spaces(input_list[0])
        # get the list of dictionaries:
        for line in input_list[1:]:
            values = split_spaces(line)
            output_list.append({key: value for key,value in zip(keys, values)} )
        return output_list
    
    print("Table: ", make_dict(INPUT))
    row1 = d[0]
    print("First row:", row1)
    print("The type of first row is:", row1['Type'])
    
    

    결과는 다음과 같습니다.

    Table:  [{'Filesystem': 'Mounted', 'Type': 'on'}, {'Filesystem': '/dev/sda', 'Type': 'ext4', '1K-blocks': '245671', 'Used': '47009', 'Available': '181459', 'Use%': '21%'}, {'Filesystem': '/dev/loop7', 'Type': 'squashfs', '1K-blocks': '39552', 'Used': '39552', 'Available': '0', 'Use%': '100%'}, {'Filesystem': 'none', 'Type': 'tmpfs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'tmpfs', '1K-blocks': '510184', 'Used': '24', 'Available': '510160', 'Use%': '0%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}, {'Filesystem': 'none', 'Type': 'aufs', '1K-blocks': '65536', 'Used': '1064', 'Available': '64472', 'Use%': '2%'}]
    First row: {'Filesystem': '/dev/sda', 'Type': 'ext4', '1K-blocks': 245671, 'Used': 47009, 'Available': 181459, 'Use%': '21%', 'Mounted': '/initlo', 'on': nan}
    The type of first row is: ext4
    
    
    참고

    와이즈 비즈  공백이나 탭이 여러 개 있거나 두 가지가 혼합되어 있으면 어쨌든 작동하기에 충분히 강력합니다. split_spaces 의 정의를 참조하십시오 정규식으로;상징 \s "하나 이상"을 의미합니다.

  • 답변 # 3

    내 이해에서 "파이썬 사전에서 위의 출력을 포함하는 문자열을 어떻게 변환 할 수 있습니까?"라는 질문이 있습니다.

    하나의 가능한 해결책은 팬더가 당신을 위해 발판을 만들도록하는 것입니다 (파일에 테이블이 있다고 가정) :

    +
    
    
    트릭은 구분자 인수 ( import pandas input_file = "input.txt" t = pandas.read_csv(input_file, sep='\s+') print("Here is the dictionary of dictionaries:") d = t.to_dict(orient='index') print("List of keys:", d.keys()) row1 = d[0] print("First row:", row1) print("The type of first row is:", row1['Type']) )에 있습니다. : 하나 이상의 공백/탭)

    이것은 출력입니다 :

    \s+
    
    
    Here is the dictionary of dictionaries: List of keys: dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) First row: {'Filesystem': '/dev/sda', 'Type': 'ext4', '1K-blocks': 245671, 'Used': 47009, 'Available': 181459, 'Use%': '21%', 'Mounted': '/initlo', 'on': nan} The type of first row is: ext4

관련 자료

  • 이전 odoo 110에서 새 javascript 파일을 추가하고 웹/로그인로드시 스크립트를 호출하려면 어떻게해야합니까?
  • 다음 python - 배열 fileld postgres에서 가장 일반적인 단어