2015-02-18 2 views
0

Есть ли способ в python указать несколько фрагментов для чтения определенных столбцов из файла csv?Как удалить несколько фрагментов строки из файла в python?

Например, файл данных может выглядеть следующим образом:

col1,col2,col3,...col20 
1,1,1,....,1 
2,2,2,....,2 
3,3,3,....,3 
etc 

Можно ли иметь команду, чтобы захватить первые 4 колонки и последние 2 колонки? Я пробовал следующие 2 пути, но я просто принимал удары в темноте, поэтому не ожидал, что он сработает. Один из способов дает мне ValueError, другой способ дает мне TypeError.

for line in fileObj: 
    date, name, time, data1, data2, data3 = line.rstrip().split(',')[0:4][18:20] # got ValueError 

for line in fileObj: 
    date, name, time, data1, data2, data3 = line.rstrip().split(',')[0:4,18:20] # got TypeError 

Если не простой путь, кто-то может дать мне намек на возможное направление, чтобы пойти для достижения этой цели?

+1

Какая версия Python? 'first, second, * _, предпоследний, last = range (10)' работает в 3.x, но не 2.x. Альтернативно, '[val для индекса, val в перечислении (строка), если индекс в set_of_indices]'. – jonrsharpe

+2

Пробовали ли вы использовать модуль 'csv', если вы читаете данные CSV? –

+0

@jonrsharpe, thx для вашего ответа. ответ на 3.x выглядит круто и точно, что мне нужно. к сожалению, я ошибаюсь на стороне осторожности и пытаюсь записать его в 2.x, если сервер, который мне нужно развернуть, не имеет 3.x = ( – Classified

ответ

1

Вы находитесь на правильном пути ...

for line in fileObj: 
    splitline = line.rstrip().split(',') 
    date, name, time, data1 = splitline[0:4] 
    data2, data3 = splitline[18:20] 

или если вы хотите, чтобы объединить 2 линии:

for line in fileObj: 
     splitline = line.rstrip().split(',') 
     date, name, time, data1, data2, data3 = splitline[0:4] + splitline[18:20] 
+0

Недостатком этого является то, что вы дважды запираете и «разделяете» - я бы это отказал. – jonrsharpe

+0

уверенный ... довольно легкий сделать – deweyredman

2

с помощью модуля CSV:

import csv 

with open(filename, 'r') as openfile: 
    reader = csv.reader(openfile) 
    for line in reader: 
     date, name, time, data1 = line[:4] 
     data2, data3 = line[-2:] 

Этот распаковывает первые четыре и последние 2 столбца

1

Pandas - лучшая библиотека для работы с CSV-файлами в Python. Например, с помощью файла:

col1,col2,col3,col4,col5,col6 
1,1,1,1,1,1 
2,2,2,2,2,2 
3,3,3,3,3,3 

Чтобы получить первые 4 колонки и последние 2, вам просто нужно:

import pandas as pd 

df = pd.read_csv('csvtest.csv') 
first_four_columns = df.ix[:,:4] 
last_two_columns = df.ix[:,-2:] 

Я действительно рекомендую вам посмотреть в библиотеке пандами: http://pandas.pydata.org/pandas-docs/stable/10min.html

Смежные вопросы