如何在特定点拆分字符串?

时间:2017-01-06 18:03:16

标签: python split text-files

我是python的新手,想把我读过的文本文件拆分成两个特定的部分。以下是可以阅读的示例:

Install-Package WindowsAPICodePack-Shell

所以我想要实现的是能够执行程序的第二部分是:

f = ['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]

我尝试过使用:

words = ['Cats','like','dogs','as','much','cats.']

numbers = [1,2,3,4,5,4,3,2,6]

但是,这会从两个新变量中删除双重支撑,这意味着我的程序的第二部分重新创建原始文本不起作用。

感谢。

6 个答案:

答案 0 :(得分:3)

我认为f是一个类似

的字符串
f = "['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]" 

然后我们可以找到][的索引并添加一个以找到括号之间的点

i = f.index('][')
a, b = f[:i+1], f[i+1:]
print(a)
print(b)

输出:

['Cats','like','dogs','as','much','cats.']
[1,2,3,4,5,4,3,2,6]

答案 1 :(得分:2)

另一种选择,如果您仍想使用split()

f = "['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]"
d="]["
print f.split(d)[0]+d[0]
print d[1]+f.split(d)[1]

答案 2 :(得分:2)

如果您可以使您的文件看起来像这样:

[["Cats","like","dogs","as","much","cats."],[1,2,3,4,5,4,3,2,6]]

然后您可以简单地使用Python的json模块为您完成此操作。请注意,JSON格式需要双引号而不是单引号。

import json
f = '[["Cats","like","dogs","as","much","cats."],[1,2,3,4,5,4,3,2,6]]'
a, b = json.loads(f)
print(a)
print(b)

可以在此处找到json库的文档:https://docs.python.org/3/library/json.html

答案 3 :(得分:1)

使用正则表达式替代帕特里克的答案:

import re

data = "f = ['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]"
pattern = 'f = (?P<words>\[.*?\])(?P<numbers>\[.*?\])'

match = re.match(pattern, data)
words = match.group('words')
numbers = match.group('numbers')

print(words)
print(numbers)

<强>输出

['Cats','like','dogs','as','much','cats.']
[1,2,3,4,5,4,3,2,6]

答案 4 :(得分:1)

如果我理解正确,你有一个包含['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]的文本文件,你只需要在括号之间的过渡处拆分该字符串。您可以使用string.index()方法和字符串切片来完成此操作。请参阅下面的控制台输出:

>>> f = open('./catsdogs12.txt', 'r')
>>> input = f.read()[:-1]  # Read file without trailing newline (\n)
>>> input
"['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]"
>>> bracket_index = input.index('][')  # Get index of transition between brackets
>>> bracket_index
41
>>> words = input[:bracket_index + 1]  # Slice from beginning of string
>>> words
"['Cats','like','dogs','as','much','cats.']"
>>> numbers = input[bracket_index + 1:]  # Slice from middle of string
>>> numbers
'[1,2,3,4,5,4,3,2,6]'

请注意,这将为您提供一个与列表(数组)在视觉上相同的python字符串。如果您需要表示为python本机对象的数据(即,您可以像列表一样实际使用它),则需要在两个字符串上使用string[1:-1].split(',')的某种组合,并在数字上使用list.map()列表将数字从字符串转换为数字。

希望这有帮助!

答案 5 :(得分:1)

您可以做的另一件事是首先将][替换为]-[,然后使用-进行拆分或分区,但我建议您进行拆分,因为我们不会想要那个分隔符。

<强> SPLIT

f = "['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]" 
f = f.replace('][',']-[')
a,b = f.split('-')

输出

>>> print(a)
['Cats','like','dogs','as','much','cats.']
>>> print(b)
[1,2,3,4,5,4,3,2,6]

<强> PARTITION

f = "['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]"
f = f.replace('][',']-[')
a,b,c = f.partition('-')

输出

>>> print(a)
['Cats','like','dogs','as','much','cats.']
>>> print(c)
[1,2,3,4,5,4,3,2,6]