2015-02-23 4 views
0

У меня есть .dat-файл, который я хотел бы построить некоторые из данных в файле. Я снял первые пару строк из файла с помощью nom1 = open('file1.dat','rb').readlines()[3:]Разбиение файла .dat в Python на график

файл .dat выглядит примерно так после строки удалены:

Flow 2012 9 22 24 0 230.0000  354.0856 
Flow 2012 9 23 24 0 231.0000  353.0887 
Flow 2012 9 24 24 0 236.0000  357.0877 
Flow 2012 9 25 24 0 235.0000  358.0837 

В общей сложности должно быть 8 колонок, но он читает каждую строку, как большой набор букв и цифр. Я хотел бы построить время, которое находится в «столбцах» 2,3 и 4 (пример 2012/9/22), против столбцов 7 и 8. Я думал об использовании функции split nom2=nom1.split(), но я получаю сообщение об ошибке AttributeError: 'list' object has no attribute 'split'. Следующая мысль состояла в том, чтобы попытаться использовать очертание по пустому пространству, но не имело реальной хорошей идеи о том, как это сделать. Если есть более быстрый и эффективный способ обойти это, пожалуйста, дайте мне знать. Также, пожалуйста, дайте мне знать, если я слишком расплывчата.

Благодаря

+1

вам необходимо перебрать элементы, находящиеся внутри списка, а затем выполнить разделение для каждого элемента. –

+0

nom1.split ("\ n"). Split() предоставит вам 2d-массив в форме, которую вы ищете. –

ответ

1
>>> file = open(r"class X.txt") 
>>> type(file.readlines()) 
<class 'list'> 

Так readlines возвращает список? Таким образом, очевидно, что при использовании нотации нарезки на нем будут пропущены первые 3 элемента в списке. Но что именно находится в этом списке?

>>> for line in file.readlines(): 
    print(type(line)) 
<class 'str'> 
<class 'str'> 
<class 'str'> 
<class 'str'> 

Таким образом, каждая строка считывается как отдельная строка! Это означает, что [3:] пропустит кулак 3 строки в файле, а не столбцы. Хорошо, но как мы можем получить фактические столбцы?

>>> for line in file.readlines(): 
    print(line.split()) 
['Flow', '2012', '9', '22', '24', '0', '230.0000', '354.0856'] 
['Flow', '2012', '9', '23', '24', '0', '231.0000', '353.0887'] 

ОК, попадая туда, мы просто разбиваем каждую отдельную строку (строку) на несколько строк, хранящихся в списке. Теперь мы можем пропустить первые 3 столбца, выполнив [3:]. Нам нужно где-то сохранить это. Как насчет списка, в котором каждый элемент представляет собой список столбцов, которые нам нужны?

>>> interesting = [] 
>>> for line in file.readlines(): 
    interesting.append(line.split()[3:]) 
>>> interesting 
[['22', '24', '0', '230.0000', '354.0856'], ['23', '24', '0', '231.0000', '353.0887'], ['24', '24', '0', '236.0000', '357.0877'], ['25', '24', '0', '235.0000', '358.0837']] 
>>> interesting[0] 
['22', '24', '0', '230.0000', '354.0856'] 

и voilá там мы идем. Подумайте об этом немного, надеюсь, это должно стать совершенно ясным.

+0

Если бы я хотел написать «интересно» в новый .txt-файл, я бы просто добавил что-то вроде: newtxt = open ("newfile", 'wb') newtxt.write (интересно) – BBHuggin

+0

@BobBlacklock да, но, возможно, вы лучше использовать только флаг 'w', так как' wb' означает «писать байты», в то время как «w» в большинстве случаев по умолчанию будет иметь ASCII-символ. – ljetibo

+0

@BobBlacklock Извините, я пропустил прочтение, вам снова придется перебирать «интересный», чтобы писать каждого участника, потому что иначе вы просто напишете неиспользуемый экземпляр «интересного» – ljetibo