Python 读取某个字符时拆分字符串
我在一个文件中存储了几个字符串,每行一个,如下所示:Python 读取某个字符时拆分字符串,python,Python,我在一个文件中存储了几个字符串,每行一个,如下所示: dsfsdfsd/mhgjghj cvcv/xcvxc werwr/erewrwer nbmbn/iuouiouio ... first_list = [dsfsdfsd, cvcv, werwr, nbmbn, ...] secnd_list = [mhgjghj, xcvxc, erewrwer, iuouiouio, ...] first_list, secnd_list = [], [] for line in file:
dsfsdfsd/mhgjghj
cvcv/xcvxc
werwr/erewrwer
nbmbn/iuouiouio
...
first_list = [dsfsdfsd, cvcv, werwr, nbmbn, ...]
secnd_list = [mhgjghj, xcvxc, erewrwer, iuouiouio, ...]
first_list, secnd_list = [], []
for line in file:
for indx, char in enumerate(line):
if char == '/':
first_list.append(line[:(indx-1)])
secnd_list.append(line[(indx-1):])
break
正如您所看到的,始终存在的唯一字符是齿隙/
,其余字符在其组成中非常随机。我需要分别存储每条线的第一部分和第二部分(即:齿隙之前和之后),以便最终得到如下结果:
dsfsdfsd/mhgjghj
cvcv/xcvxc
werwr/erewrwer
nbmbn/iuouiouio
...
first_list = [dsfsdfsd, cvcv, werwr, nbmbn, ...]
secnd_list = [mhgjghj, xcvxc, erewrwer, iuouiouio, ...]
first_list, secnd_list = [], []
for line in file:
for indx, char in enumerate(line):
if char == '/':
first_list.append(line[:(indx-1)])
secnd_list.append(line[(indx-1):])
break
我可以在python中迭代每一行,检查是否存在反冲,并分别存储每一行的内容。它看起来是这样的:
dsfsdfsd/mhgjghj
cvcv/xcvxc
werwr/erewrwer
nbmbn/iuouiouio
...
first_list = [dsfsdfsd, cvcv, werwr, nbmbn, ...]
secnd_list = [mhgjghj, xcvxc, erewrwer, iuouiouio, ...]
first_list, secnd_list = [], []
for line in file:
for indx, char in enumerate(line):
if char == '/':
first_list.append(line[:(indx-1)])
secnd_list.append(line[(indx-1):])
break
我正在寻找一个更漂亮(更具Python风格)的代码版本。split()
first_list, secnd_list = [], []
for line in file:
first, second = line.split('/')
first_list.append(first)
secnd_list.append(second)
这里的一个假设是,只有一个/
存在。知道了这一点,split('/')
将始终返回一个2元组的元素。如果此假设为假,请尝试使用拆分(“/”,1)
-它将拆分的数量限制为1,从左到右计数。split()
在这里可能很有用:
first_list, secnd_list = [], []
for line in file:
first, second = line.split('/')
first_list.append(first)
secnd_list.append(second)
这里的一个假设是,只有一个
/
存在。知道了这一点,split('/')
将始终返回一个2元组的元素。如果此假设为假,请尝试拆分(“/”,1)-它将拆分数量限制为1,从左到右计数。以及str.split
您可以使用str.partition
:
first_parts = []
second_parts = []
for line in file:
before, _, after = line.partition('/')
first_parts.append(before)
second_parts.append(after)
另一种功能更强大的oneliner:
first_parts, _, second_parts = zip(*(line.partition('/') for line in file))
两个选项中的
解释-str.partition
返回一个元组:(第一部分、分隔符、最后一部分)
。在这里,我们不需要分隔符(事实上,我无法想象您为什么会需要分隔符),因此我们将其分配给一次性变量\uu
是用于
str.partition
的文档,是用于str.split
的文档,以及str.split
您可以使用str.partition
:
first_parts = []
second_parts = []
for line in file:
before, _, after = line.partition('/')
first_parts.append(before)
second_parts.append(after)
另一种功能更强大的oneliner:
first_parts, _, second_parts = zip(*(line.partition('/') for line in file))
两个选项中的
解释-str.partition
返回一个元组:(第一部分、分隔符、最后一部分)
。在这里,我们不需要分隔符(事实上,我无法想象您为什么会需要分隔符),因此我们将其分配给一次性变量\uu
是用于
str.partition
的文档,还是用于str.split
的文档?你试过这个吗?@AleksanderLidtke没有,据我记忆所及,以前从未用过这个。反斜杠是`。
/`是斜杠。保持这些笔直是非常重要的,否则你以后会有严重的问题。区分正斜杠和反斜杠的最佳方法是:将手指举到脸前o
(o
是你的头,
是你的手指)。如果你向前弯曲手指,你会得到一个正斜杠-o/
。如果你向后弯曲手指,你会得到一个反斜杠-o\
someString
。拆分('/')`?你试过这个吗?@AleksanderLidtke没有,据我记忆所及,以前从未用过这个。反斜杠是`。
/`是斜杠。保持这些笔直是非常重要的,否则你以后会有严重的问题。区分正斜杠和反斜杠的最佳方法是:将手指举到脸前o
(o
是你的头,
是你的手指)。如果你向前弯曲手指,你会得到一个正斜杠-o/
。如果你将手指向后弯曲,你会得到一个反斜杠-o\
。一个旁注,*(文件中的行的line.partition('/'))
将创建整个列表,然后将其传递给zip
。这与时间性能无关,而与内存性能有关-尝试打开一个新的解释器会话并运行func(*xrange(100000000))
func
是一个简单的def func(*args):pass
。在我的机器上,我有一个MemoryError
。一个旁注,*(文件中的行的line.partition('/'))
将在传递给zip
之前创建整个列表。这与时间性能无关,而与内存有关-尝试打开一个新的解释器会话并运行func(*xrange(100000000))
func
是一个简单的def func(*args):pass
。在我的机器上,我有内存错误
。