我的views.py文件代码:
#!/usr/bin/python
from django.template import loader, RequestContext
from django.http import HttpResponse
#from skey import find_root_tags, count, sorting_list
from search.models import Keywords
from django.shortcuts import render_to_response as rr
def front_page(request):
if request.method == 'POST' :
from skey import find_root_tags, count, sorting_list
str1 = request.POST['word']
fo = open("/home/pooja/Desktop/xml.txt","r")
for i in range(count.__len__()):
file = fo.readline()
file = file.rstrip('\n')
find_root_tags(file,str1,i)
list.append((file,count[i]))
sorting_list(list)
for name, count1 in list:
s = Keywords(file_name=name,frequency_count=count1)
s.save()
fo.close()
list1 = Keywords.objects.all()
t = loader.get_template('search/results.html')
c = RequestContext({'list1':list1,
})
return HttpResponse(t.render(c))
else :
str1 = ''
list = []
template = loader.get_template('search/front_page.html')
c = RequestContext(request)
response = template.render(c)
return HttpResponse(response)
我在函数find_root_tags(file,str1,i)
中发送的变量“file”具有xml文件的名称。此文件存在于我的桌面上,此代码写在我的django应用程序的views.py文件中,因此无法打开该文件。如何打开该文件,因为xml.txt包含要读取然后打开的类似文件名。简而言之,我如何将文件参数发送为:
file1 = '/home/pooja/Desktop/<filename>'
此处<filename>
等于存储在变量file
中的值,并且可以将其称为:
find_root_tags(file1, str1, i)
/////////////////////////////////////////////// /////////////////////////////////////////////
澄清:
1)请参考变量“file”,您可以在其中看到我正在存储xml.txt的读取内容。
2)xml.txt包含xml文件名。 views.py文件是django app的一部分,由于它们存在于桌面上,因此无法打开这些文件。
3)我的问题是如何修改和发送包含文件名的文件变量,附加了它的绝对路径:
'/home/pooja/Desktop/filename'
通过这样做,它将打开桌面上的文件。
答案 0 :(得分:1)
试试这个:
pathh='/home/pooja/Desktop/' #set the base path
fo = open("/home/pooja/Desktop/xml.txt")
for i in range(len(count)): #use len(count)
file = fo.readline()
file = file.strip() #use strip()
find_root_tags(pathh+file,str1,i) #base path+file
mylist.append((file,count[i])) #using 'list' as a variable name is not good
答案 1 :(得分:0)
因此,如果我理解您的问题,文件/home/pooja/Desktop/xml.txt
包含文件名,每行一个,相对于/home/pooja/Desktop/
,您需要将完整路径名传递给find_root_tags
。
在Python中,您可以使用+
来连接字符串,因此您可以执行以下操作:
files_path = "/home/pooja/Desktop/"
for i in range(len(count)):
file = fo.readline()
file = file.rstrip('\n')
find_root_tags(files_path + file, str1, i)
list.append((file,count[i]))
首先,请注意我已将count.__len__
替换为len(count)
。在Python中,不直接调用魔术方法,即__xxxx__
形式的方法。它们被定义为由其他一些机制调用。对于len方法,当您使用len()
内置函数时,会在内部调用它。
其次,请注意,如果xml.txt
中的行数少于len(count)
,则fo.readline
会在您阅读完文件的所有行后引发异常。在Python中读取文件所有行的常用方法是:
my_file = open("/path/to/file", 'r')
for line in my_file:
# do something with your line
最后,为确保您的文件在发生任何事情时都已关闭,即使您在阅读文件时引发异常,也可以使用with statement。
所以在你的例子中,你会做类似的事情:
files_path = "/home/pooja/Desktop/"
with open("/path/to/file", 'r') as my_file:
for file in my_file:
file = file.rstrip('\n')
find_root_tags(files_path + file, str1, i)
list.append((file,count[i]))