Как прочитать в строке все символы из столбца A в B

StackOverflow https://stackoverflow.com/questions/1710030

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

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

"xvfrt ert5a" ?

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

Это было полезно?

Решение

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

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

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

Другие советы

lst = [line[6:17] for line in open(fname)]
another_list = []
for line in f:
    another_list.append(line[6:17])

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

another_list = (line[6:17] for line in f)

Я собираюсь немного подробнее остановиться на ответе Майкла Диллона.Если под "столбцами с 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)]

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

my_list = []

for line in open(filename):
    my_list.append(line[7:18])
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!

Эта functionw вычислит нужную вам строку и распечатает ее

def readCols(filepath):
    f = open(filepath, 'r')
        for line in file:
            newString = line[6:17]
            print newString
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top