2016-10-27 2 views
-2

도와주세요, data.txt 파일이 있습니다. 그리고 난이 내 data.txt라는 파일의 내용입니다 디렉토리에 C. 자유 공간 데이터입니다 해당 파일 112652447744에 특정 데이터를 읽을 수 : 각 라인 (첫 번째를 무시를) 읽을 수파이썬을 사용하여 txt 파일에서 특정 데이터를 읽는 방법

Caption FreeSpace  Size   
    C:  112652447744 146776518656 
    D:  295803727872 299962986496 
    E:         
    Z:         
+0

겠습니까 파일의 모든 데이터를 읽고에만 읽기 목록에서 필요한 데이터가 가능한 해결책이 될 추출? – Ashan

+0

이미 시도한 것이 있습니까? 그리고 그것을 동적이거나 항상 두 번째 열의 두 번째 열이되기를 원합니 까? – xZise

+0

@xZise 항상 두 번째 행의 두 번째 coloum –

답변

1

및 공백으로 구분하여 각 열을 가져옵니다. 각 파티션의 크기와 여유 공간을 추출 할 수있는이 방법 :

contents = # here go the file contents 
# split the text file into lines and ignore the first line 
lines = contents.splitlines()[1:] 
part_data = {} 
for line in lines: 
    columns = line.split() # split the lines along the white space characters 
    if len(columns) != 3: 
     continue # incomplete lines 
    part_data[columns[0]] = (columns[1], columns[2]) 

당신에게 사전에있는 모든 파티션의 여유 공간과 크기를 제공 할 것입니다. 실제 결과를 얻으려면 그것은 것 : 거기 당신을

contents = # here go the file contents 
second_line = contents.splitlines()[1] 
second_column = second_line.split()[1] 

: 당신은 드라이브 문자를 무시하고, 두 번째 열 및 두 번째 행을 원하는 경우에

part_data['C:'][0] 

, 당신은 다음에 그것을 줄일 수 있습니다 가고 싶지만, 항상 똑같은 형식이어야합니다. 두 번째 줄에 세 개의 열이 없으면 실제로 작동하지 않고 IndexError이됩니다.

a_string.split()은 모든 공백을 자동으로 제거하고 a_string.split(' ')은 공백을 자동으로 반환합니다.

#Open file in lines 
file = open('path/to/txt','r').readlines() 
#For each line 
for disk in file: 
    fields = disk.split("\t") 
    #To check the total fields... 
    if(len(fields)>1): 

     print fields[1] 
+0

file.txt를 읽는 방법. '{ '\ xff \ xfeC \ '파일을 열면'D : \ Disk_2016-10-13.txt ','r ') 내용 = file.readlines() 인쇄 contensts' x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ ]' –

+0

먼저 내용을 디코딩해야합니다. 텍스트는 UTF-16으로 인코딩 된 것으로 보입니다. 먼저 내용을 디코딩하면 도움이됩니다 :'contents = file.read()'와'contents = contents.decode ("UTF16")'. 'splitlines()'도 똑같이 할 것이므로'readlines()'를 사용할 필요가 없습니다. 'splitlines()'를 사용하면 해독 한 후에 분할됩니다. – xZise

+0

정말 고맙습니다. –

1

이 시도

파일에 데이터가 필요하지 않으면 다른 결과를 얻기 위해 파일을 한 줄씩 읽습니다. 첫 번째 행은 헤더 행이며, 'caption_header'및 'fs_header'의 위치를 ​​사용하여 각 후속 데이터 행을 구문 분석합니다.

예에서 각 행의 첫 번째 값에 C :가 포함되어 있는지 테스트하고, 그렇다면 우리가 찾고있는 대답이 두 번째 열에 있음을 의미합니다. 대답을 찾으면 나머지 행을 검색 할 필요가 없습니다.

def find_value(caption_header, fs_header, caption_value, fp): 
    fs = None 
    with open(fp) as fid: 
     headers = fid.readline().strip().split() 
     for i, h in enumerate(headers): 
      if h == caption_header: 
       caption_position = i 
      if h == fs_header: 
       fs_position = i 
     line = fid.readline() 
     while line != '': 
      values = line.strip().split() 
      if values[caption_position] == caption_value: 
       fs = values[fs_position] 
       break 
    return fs 

다음과 같이 사용 :

fs = find_value('Caption', 'FreeSpace', 'C:') 
1

귀하의 질문은 그렇게 말씀하지 않습니다,하지만 난 당신이 캡션는 C 행에서의 FreeSpace을 대표하는 "조회"값을한다고 가정 할 수 있습니다 :? :

관련 문제