Как прочитать в строке все символы от столбца A до B - PullRequest
1 голос
/ 10 ноября 2009

возможно ли это в Python, учитывая файл с 10000 строками, где все они имеют такую ​​структуру:

1, 2, xvfrt ert5a fsfs4 df f fdfd56, 234

или аналогичный, чтобы прочитать всю строку, а затем сохранить в другой строке все символы от столбца 7 до столбца 17, включая пробелы, поэтому новая строка будет

"xvfrt ert5a"?

Большое спасибо

Ответы [ 7 ]

7 голосов
/ 10 ноября 2009
lst = [line[6:17] for line in open(fname)]
5 голосов
/ 10 ноября 2009
another_list = []
for line in f:
    another_list.append(line[6:17])

Или как генератор (решение, ориентированное на память):

another_list = (line[6:17] for line in f)
2 голосов
/ 11 ноября 2009

Я собираюсь принять ответ Майкла Диллона немного дальше. Если под «столбцами с 6 по 17» вы подразумеваете «первые 11 символов третьего разделенного запятыми поля», это хорошая возможность использовать модуль csv. Кроме того, для Python 2.6 и выше рекомендуется использовать оператор with при открытии файлов. Вот:

import csv
with open(filepath, 'rt') as f:
  lst = [row[2][:11] for row in csv.reader(f)]

Это сохранит ведущие пробелы; если вы не хотите этого, измените последнюю строку на

  lst = [row[2].lstrip()[:11] for row in csv.reader(f)]
1 голос
/ 10 ноября 2009

Это технически отвечает на прямой вопрос:

lst = [line[6:17] for line in open(fname)]

но есть фатальный недостаток. Это нормально для одноразового кода, но эти данные выглядят подозрительно как значения, разделенные запятыми, а третье поле может даже быть разделенными пробелом порциями данных. Намного лучше сделать это так, чтобы, если в первых двух столбцах появилась дополнительная цифра, она все равно работала:

lst = [x[2].strip()[0:11] for x in [line.split(',') for line in open(fname)]]

И если эти разделенные пробелами куски могут стать длиннее, то это:

lst = [x[2].strip().split()[0:2] for x in [line.split(',') for line in open(fname)]]

Не забудьте комментарий или два, чтобы объяснить, что происходит. Может быть:

# on each line, get the 3rd comma-delimited field and break out the 
# first two space-separated chunks of the licence key

Предполагая, конечно, что это лицензионные ключи. Не нужно быть слишком абстрактным в комментариях.

1 голос
/ 10 ноября 2009

Вы не говорите, как хотите хранить данные из каждой из 10000 строк - если вы хотите, чтобы они были в списке, вы бы сделали что-то вроде этого:

my_list = []

for line in open(filename):
    my_list.append(line[7:18])
0 голосов
/ 10 ноября 2009

Эта функция w вычислит нужную строку и выведет ее

def readCols(filepath):
    f = open(filepath, 'r')
        for line in file:
            newString = line[6:17]
            print newString
0 голосов
/ 10 ноября 2009
for l in open("myfile.txt"):
   c7_17 = l[6:17]
   # Not sure what you want to do with c7_17 here, but go for it!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...