Запись/парсинг фиксированного файла ширины с помощью Python

Вы забыли включить ядро ​​zxing в свой build.gradle:

implementation 'com.google.zxing:core:3.3.0'
11
задан Wayne Molina 11 May 2009 в 15:01
поделиться

6 ответов

Вам не нужно назначать срезы, просто создайте строку с использованием % форматирования .

Пример с фиксированным форматом для 3 элементов данных:

>>> fmt="%4s%10s%10s"
>>> fmt % (1,"ONE",2)
'   1       ONE         2'
>>> 

То же самое, ширина поля, поставляемая с данными:

>>> fmt2 = "%*s%*s%*s"
>>> fmt2 % (4,1, 10,"ONE", 10,2)
'   1       ONE         2'
>>> 

Разделение данных и ширины полей и использование трюков zip () и str.join () :

>>> widths=(4,10,10)
>>> items=(1,"ONE",2)
>>> "".join("%*s" % i for i in zip(widths, items))
'   1       ONE         2'
>>> 
17
ответ дан 3 December 2019 в 02:11
поделиться

Разобрать ваш вопрос немного сложно, но я понимаю, что вы получаете файл или подобный файлу объект, читаете его и заменяете некоторые значения некоторой бизнес-логикой полученные результаты. Это правильно?

Самый простой способ преодолеть неизменность строки - написать новую строку:

# Won't work:
test_string[3:6] = "foo"

# Will work:
test_string = test_string[:3] + "foo" + test_string[6:]

Сказав это, для вас важно что-то сделать с этой строкой, но я не уверен что это такое. Вы записываете его обратно в выходной файл, пытаетесь отредактировать файл на месте или что-то еще? Я поднимаю этот вопрос, потому что процесс создания новой строки (которая имеет то же имя переменной, что и старая строка) должен подчеркнуть необходимость выполнения явной операции записи после преобразования.

0
ответ дан 3 December 2019 в 02:11
поделиться
Переменные экземпляра с соответствующими именами в __ init __ изначально устанавливаются в пустую строку.

Метод __ str __ выводит эти значения в виде строки. Он использует понимание списка по атрибуту fields уровня класса, ищет значение экземпляра для каждого поля по имени, а затем выравнивает его по левому краю в соответствии с столбцами. Результирующий список полей затем объединяется пустой строкой.

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

Метод __ str __ выводит эти значения в виде строки. Он использует понимание списка по атрибуту fields уровня класса, ищет значение экземпляра для каждого поля по имени, а затем выравнивает его по левому краю в соответствии с столбцами. Результирующий список полей затем объединяется пустой строкой.

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

Метод __ str __ выводит эти значения в виде строки. Он использует понимание списка по атрибуту fields уровня класса, ищет значение экземпляра для каждого поля по имени, а затем выравнивает его по левому краю в соответствии с столбцами. Результирующий список полей затем объединяется пустой строкой.

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

а затем выравнивание по левому краю по столбцам. Результирующий список полей затем объединяется пустой строкой.

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

а затем выравнивание по левому краю по столбцам. Результирующий список полей затем объединяется пустой строкой.

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

8
ответ дан 3 December 2019 в 02:11
поделиться

Вы можете использовать ] justify функции для выравнивания по левому краю, по правому краю и центрирования строки в поле заданной ширины.

'hi'.ljust(10) -> 'hi        '
8
ответ дан 3 December 2019 в 02:11
поделиться

Вы можете преобразовать строку в список и выполнять манипуляции с срезами.

>>> text = list("some text")
>>> text[0:4] = list("fine")
>>> text
['f', 'i', 'n', 'e', ' ', 't', 'e', 'x', 't']
>>> text[0:4] = list("all")
>>> text
['a', 'l', 'l', ' ', 't', 'e', 'x', 't']
>>> import string
>>> string.join(text, "")
'all text'
0
ответ дан 3 December 2019 в 02:11
поделиться

Легко написать функцию для "изменения" строки.

def change(string, start, end, what):
    length = end - start
    if len(what)<length: what = what + " "*(length-len(what))
    return string[0:start]+what[0:length]+string[end:]

Использование:

test_string = 'This is test string'

print test_string[5:7]  
# is
test_string = change(test_string, 5, 7, 'IS')
# This IS test string
test_string = change(test_string, 8, 12, 'X')
# This IS X    string
test_string = change(test_string, 8, 12, 'XXXXXXXXXXXX')
# This IS XXXX string
0
ответ дан 3 December 2019 в 02:11
поделиться
Другие вопросы по тегам:

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