Python 中的字符串按索引顺序替换
String replace in Python, in sequence, by index
我是刚开始从 YouTube 学习 Python 的新手。我正在尝试制作一个程序,用新的字符串数字替换旧的字符串数字,并在替换数字时遇到问题。想按索引替换(它的技术术语是什么(我不知道))。它可以朝一个方向或按索引方向移动。
我的字符串是= (01010110110111011110111101111011110101101101101011011011010101010101010101011101110101110111101)
我想将 010 替换为 0、0110,将 00、01110、000 和 011110 替换为 0000,
所以我替换的 string/output 字符串将是这样的..
(01 0011 0001111 00001111 00001 0011 001 0011 001 01 01 01 01 000111 0111 00001)
根据我的代码,它花费了太多时间(仅 8MB 的文件就花费了近 2-3 小时。
with open('1.txt', 'r') as f:
newstring = ''
old_list = ['010', '0110', '01110', '011110']
new_list = ['0', '00', '000', '0000']
while True:
try:
chunk = f.read()
except:
print('Error while file opening')
if chunk:
n = len(chunk)
i = 0
while i < n:
flag = False
for j in range(6, 2, -1):
if chunk[i:i + j] in old_list:
flag = True
index = old_list.index(chunk[i:i + j])
newstring = newstring + new_list[index]
i = i + j
break
if flag == False:
newstring = newstring + chunk[i]
i = i + 1
newstring=''.join((newstring))
else:
try:
f = open('2xx.txt', "a")
f.write("01"+newstring)
f.close()
except:
print('Error While writing into file')
break
我相信这就是您要找的:
old_str = "01010110110111011110111101111011110101101101101011011011010101010101010101011101110101110111101"
split_str = old_str.split("0") # split by 0 delimiter
res = ""
for idx, each in enumerate(split_str):
if idx % 2 != 0: # odd index, turn however many 1's into 0's
res += "0" * len(each)
else:
res += each
print(res)
这是简单的代码,因此不包括任何输入有效性检查,但它展示了基本概念。根据您的 situation/preferences
进行相应编辑
我是刚开始从 YouTube 学习 Python 的新手。我正在尝试制作一个程序,用新的字符串数字替换旧的字符串数字,并在替换数字时遇到问题。想按索引替换(它的技术术语是什么(我不知道))。它可以朝一个方向或按索引方向移动。
我的字符串是= (01010110110111011110111101111011110101101101101011011011010101010101010101011101110101110111101)
我想将 010 替换为 0、0110,将 00、01110、000 和 011110 替换为 0000,
所以我替换的 string/output 字符串将是这样的..
(01 0011 0001111 00001111 00001 0011 001 0011 001 01 01 01 01 000111 0111 00001)
根据我的代码,它花费了太多时间(仅 8MB 的文件就花费了近 2-3 小时。
with open('1.txt', 'r') as f:
newstring = ''
old_list = ['010', '0110', '01110', '011110']
new_list = ['0', '00', '000', '0000']
while True:
try:
chunk = f.read()
except:
print('Error while file opening')
if chunk:
n = len(chunk)
i = 0
while i < n:
flag = False
for j in range(6, 2, -1):
if chunk[i:i + j] in old_list:
flag = True
index = old_list.index(chunk[i:i + j])
newstring = newstring + new_list[index]
i = i + j
break
if flag == False:
newstring = newstring + chunk[i]
i = i + 1
newstring=''.join((newstring))
else:
try:
f = open('2xx.txt', "a")
f.write("01"+newstring)
f.close()
except:
print('Error While writing into file')
break
我相信这就是您要找的:
old_str = "01010110110111011110111101111011110101101101101011011011010101010101010101011101110101110111101"
split_str = old_str.split("0") # split by 0 delimiter
res = ""
for idx, each in enumerate(split_str):
if idx % 2 != 0: # odd index, turn however many 1's into 0's
res += "0" * len(each)
else:
res += each
print(res)
这是简单的代码,因此不包括任何输入有效性检查,但它展示了基本概念。根据您的 situation/preferences
进行相应编辑