Python, проверьте строки на наличие значений и удалите другие символы

Добавляя к ответ Грега Бука (потому что я только что искал это), если вы хотите использовать это из Linq, вы можете использовать OrderBy, который принимает IComparer. Например ::

var items = new List();

// fill items

var sorted = items.OrderBy(item => item.Name, new NaturalStringComparer());

0
задан taras 19 March 2019 в 09:50
поделиться

4 ответа

Для new_sample.txt :

 ranges: [1.3,1.9,2.05,inf,1.64]

вы можете разделить данные с разделителем пробелом и "," :

f = open("new_sample.txt", "r")
file = f.read().splitlines()
f.close()
result = []

for i in file:
    b = i.split(" ")
    if b[0] == "ranges:":
        temp = b[1][1:-1].split(",")

for j in temp:
    if j not in ["inf"]:
        result.append(j)

print(result)
OUTPUT: ['1.3', '1.9', '2.05', '1.64']
0
ответ дан Camile 19 March 2019 в 09:50
поделиться

Если вы прочитали строки файла и можете получить список,

, как

ranges_in_file = [1.3,1.9,2.05,math.inf,1.64]

, вы можете понять, что вам нужно / не нужно :

wanted = [x for x in ranges_in_file if x not in [math.inf, "range"] ]
0
ответ дан doctorlove 19 March 2019 в 09:50
поделиться

Если ваши строки всегда выглядят так, поэтому начинайте с "ranges: ", за которым следует список значений, и единственное, что вы хотите удалить - inf, вы можете легко превратить его в список с плавающей точкой, Функция map выглядит следующим образом:

line = "ranges: [1.3,1.9,2.05,inf,1.64]"
values = list(map(float, [x.strip('[]') for x in (line.split(' ')[1]).split(',') if 'inf' not in x]))

Вывод:

[1.3, 1.9, 2.05, 1.64]  # list of float values

Затем вы можете применить это к каждой строке файла, которая начинается с 'ranges:', что даст вам список отдельных строк значений списков. Обратите внимание на использование with open(..., которое в целом безопаснее использовать для файлов, поскольку файл всегда будет правильно закрыт, независимо от того, что произойдет.

values = []
with open('new_sample.txt', 'r') as f:
    for line in f.readlines():
        if line.startswith('ranges:'):
            line_values = list(map(float, [x.strip #.... and so on, see above
            values.append(line_values)

Но если ваши строки могут отличаться, необходим более общий подход.

0
ответ дан Flob 19 March 2019 в 09:50
поделиться

Вы можете разделить переменную ranges и список, используя a,b=ranges_in_file.split('=') b.strip(). Таким образом, b содержит требуемый список в виде строки. Используйте c=list(b[1:len(b)-1].split(',')), чтобы преобразовать его в список. Затем вы можете перебирать список и отбрасывать любые значения, которые вам не нужны. (Помните, что все записи в списке являются строками!)

0
ответ дан Tojrah 19 March 2019 в 09:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: