我有一个django应用程序,它使用类将django-export-import的输出写入静态文件夹。
我想删除输出的第一行和逗号之后的任何内容。
我试过使用re,但我似乎无法让它工作。
这是当前的输出:
ipadd,active
192.168.42.33/32,1
192.168.95.1/32,1
我希望输出为:
192.168.42.33/32
192.168.95.1/32
这是我的代码
class IPResourceExport(resources.ModelResource):
class Meta:
model = IPAddress
fields = ('ipadd', 'active',)
def deploy_ip(request):
queryset = IPAddress.objects.filter(active=1)
dataset = IPResourceExport().export(queryset)
output_path = settings.STATIC_ROOT + '/iptemp.txt'
f = open(output_path, 'w')
f.write(dataset.csv)
f.flush()
f.close()
template_name = "block/deploy.html"
context = {}
return render(request, template_name, context)
更新了工作代码:
def deploy_ip(request):
queryset = IPAddress.objects.filter(active=1)
dataset = IPResourceExport().export(queryset)
new_data = dataset.csv
out_data = re.sub(',1', '', new_data.split('\n', 1)[1])
output_path = settings.STATIC_ROOT + '/output/iptemp.txt'
f = open(output_path, 'w')
f.write(out_data)
f.close()
template_name = "block/deploy.html"
context = {}
return render(request, template_name, context)
答案 0 :(得分:0)
我添加了正则表达式并拆分为函数以获得我需要的输出。上面更新的工作代码中的代码按预期工作。谢谢杰布!
>> import re
>>> original = "ipadd,active\n192.168.42.33/32,1\n192.168.95.1/32"
>>> print original
ipadd,active
192.168.42.33/32,1
192.168.95.1/32,1
>>> print original.split('\n', 1)
['ipadd,active', '192.168.42.33/32,1\n192.168.95.1/32']
>>> print original.split('\n', 1)[1]
192.168.42.33/32,1
192.168.95.1/32,1
other stuff
>>> print re.sub(',1', '', original.split('\n', 1)[1])
192.168.42.33/32
192.168.95.1/32
>>>
答案 1 :(得分:0)
我认为最好在字符串对象dataset
写入文件之前对其进行操作。
所以我们可以从字符串
开始>>> original = "ipadd,active\n192.168.42.33/32,1\n192.168.95.1/32,1\nother stuff"
>>> print original
ipadd,active
192.168.42.33/32,1
192.168.95.1/32,1
然后使用字符串方法split
在发生'\n'
的地方划分字符串,并返回包含所有部分的列表。由于我们只想将其分为两部分,因此我们会将maxsplit
参数设置为1
docs on str.split。
>>> print original.split('\n', 1)
['ipadd,active', '192.168.42.33/32,1\n192.168.95.1/32,1\nother stuff']
然后我们可以只使用列表的第二部分(索引1)作为新的字符串dataset
并删除第一行
>>> print original.split('\n', 1)[1]
192.168.42.33/32,1
192.168.95.1/32,1
other stuff
现在,为了获得',1'
,我们可以使用re
模块和sub
函数执行类似sed搜索和替换的操作。我们正在搜索',1'
的所有实例,并在目标字符串''
中将其替换为original.blah.blah
,即无内容。
docs on re.sub。
>> import re
>>> print re.sub(',1', '', original.split('\n', 1)[1])
192.168.42.33/32
192.168.95.1/32
other stuff