我有一个名为file_contents
的字符串列表。
列表中的每个项目都以此格式的数字继续:#1。 #2。等等..
我想从列表中的每个项目中删除它们。
for item in range(len(file_contents)):
file_contents[item].lstrip('#' + [item] + ". ")
所以,我想将"#1. Apples"
变成"Apples"
。
有什么建议吗?
当我运行此操作时,我收到以下错误:
TypeError: Can't convert 'list' object to str implicitly
这是我定义的整个方法:
def read_from_file(self, filename):
"""Checks if file exists, if it does, reads it in and creates new List object."""
file_contents = []
fileExists = os.path.isfile(filename)
if not fileExists:
print(filename, "does not exist.")
else:
with open(filename) as file:
file_contents = [line.strip() for line in file]
for item in range(len(file_contents)):
file_contents[item] = file_contents[item].lstrip('#' + str(item) + ". ")
list_name = file_contents[0]
list_contents = []
for item in file_contents:
if item in list_name:
continue
else:
list_contents.append(item)
new_list = List(list_name)
new_list.contents = list_contents
return new_list
答案 0 :(得分:4)
Regular expressions非常适合:
import re
pattern = re.compile(r'#\d+\.\s*')
new_contents = [pattern.sub('', item) for item in file_contents]
我建议您阅读doc链接,了解正则表达式的工作原理,但对模式进行简要说明:
#
- 寻找#
字符\d+
- 后跟一个或多个数字\.
- 然后是一个点字符\s*
- 然后是任意数量的空白 re.sub
查找该模式,然后将其替换为''
,一个空字符串 - 从而将其删除。
您也非常误解lstrip
和Python语法的常用方式:
[item]
只会是[0]
,[1]
等,这就是为什么您无法将其连接到字符串的原因。我不太确定你在那里努力实现的目标。 答案 1 :(得分:0)
我认为你打算做的是
stripped_contents = []
with open('test.data') as f:
for i, line in enumerate(f):
strip = '#' + str(i + 1) + ". "
stripped_line = line.lstrip(strip)
stripped_contents.append(stripped_line)
print stripped_contents
即。您需要将项目转换为字符串而不是列表。另外,因为它从0开始,你需要项目+1。
另一种解决方案可能是
stripped_contents = []
with open('test.data') as f:
for i, line in enumerate(f):
start_pos = len('#' + str(i + 1) + ". ")
stripped_line = line[start_pos:]
stripped_contents.append(stripped_line)
print stripped_contents
正则表达式也可以。但对于这样一个简单的问题感到过于复杂。
答案 2 :(得分:0)
如果你没有想要从左边剥去所有字符到lstrip:
def read_from_file(self, filename):
"""Checks if file exists, if it does, reads it in and creates new List object."""
file_contents = []
fileExists = os.path.isfile(filename)
if not fileExists:
return (filename, "does not exist.")
with open(filename) as file:
file_contents = [line.lstrip("0123456789.").strip() for line in file]
您正在移除换行符,因此您只需调用strip,之后将删除换行符和行距空间:
In [14]: "#123. 1foo".lstrip("0123456789#.").strip()
Out[14]: '1foo'