Вы забыли включить ядро zxing в свой build.gradle:
implementation 'com.google.zxing:core:3.3.0'
Вам не нужно назначать срезы, просто создайте строку с использованием % форматирования
.
Пример с фиксированным форматом для 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'
>>>
Разобрать ваш вопрос немного сложно, но я понимаю, что вы получаете файл или подобный файлу объект, читаете его и заменяете некоторые значения некоторой бизнес-логикой полученные результаты. Это правильно?
Самый простой способ преодолеть неизменность строки - написать новую строку:
# Won't work:
test_string[3:6] = "foo"
# Will work:
test_string = test_string[:3] + "foo" + test_string[6:]
Сказав это, для вас важно что-то сделать с этой строкой, но я не уверен что это такое. Вы записываете его обратно в выходной файл, пытаетесь отредактировать файл на месте или что-то еще? Я поднимаю этот вопрос, потому что процесс создания новой строки (которая имеет то же имя переменной, что и старая строка) должен подчеркнуть необходимость выполнения явной операции записи после преобразования.
__ init __
изначально устанавливаются в пустую строку.
Метод __ str __
выводит эти значения в виде строки. Он использует понимание списка по атрибуту fields
уровня класса, ищет значение экземпляра для каждого поля по имени, а затем выравнивает его по левому краю в соответствии с столбцами. Результирующий список полей затем объединяется пустой строкой.
Обратите внимание, что это не анализирует ввод, хотя вы можете легко переопределить конструктор, чтобы взять строку и проанализировать столбцы в соответствии с полем и шириной поля в ] поле
. Он также не проверяет, например, значения экземпляра, длина которых превышает заданную ширину.
Метод __ str __
выводит эти значения в виде строки. Он использует понимание списка по атрибуту fields
уровня класса, ищет значение экземпляра для каждого поля по имени, а затем выравнивает его по левому краю в соответствии с столбцами. Результирующий список полей затем объединяется пустой строкой.
Обратите внимание, что это не анализирует ввод, хотя вы можете легко переопределить конструктор, чтобы взять строку и проанализировать столбцы в соответствии с полем и шириной поля в ] поле
. Он также не проверяет, например, значения экземпляра, длина которых превышает заданную ширину.
Метод __ str __
выводит эти значения в виде строки. Он использует понимание списка по атрибуту fields
уровня класса, ищет значение экземпляра для каждого поля по имени, а затем выравнивает его по левому краю в соответствии с столбцами. Результирующий список полей затем объединяется пустой строкой.
Обратите внимание, что это не анализирует ввод, хотя вы можете легко переопределить конструктор, чтобы взять строку и проанализировать столбцы в соответствии с полем и шириной поля в ] поле
. Он также не проверяет, например, значения экземпляра, длина которых превышает заданную ширину.
Обратите внимание, что это не анализирует ввод, хотя вы можете легко переопределить конструктор, чтобы взять строку и проанализировать столбцы в соответствии с полем и шириной поля в ] поле
. Он также не проверяет, например, значения экземпляра, длина которых превышает заданную ширину.
Обратите внимание, что это не анализирует ввод, хотя вы можете легко переопределить конструктор, чтобы взять строку и проанализировать столбцы в соответствии с полем и шириной поля в ] поле
. Он также не проверяет, например, значения экземпляра, длина которых превышает заданную ширину.
Вы можете использовать ] justify функции для выравнивания по левому краю, по правому краю и центрирования строки в поле заданной ширины.
'hi'.ljust(10) -> 'hi '
Вы можете преобразовать строку в список и выполнять манипуляции с срезами.
>>> 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'
Легко написать функцию для "изменения" строки.
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