3

我正在尝试创建一个脚本,该脚本将families使用从文本文件中提取的信息填充我的模型。这是我在 中的第一篇文章StackOverflow,请温柔,如果问题表达得不好或格式不正确,请见谅。

Django V 1.9 并在 Python 3.5 上运行
已安装 Django 扩展

这是我的模型:它在一个名为 browse

from django.db import models
from django_extensions.db.models import TimeStampedModel


class families(TimeStampedModel):
     rfam_acc = models.CharField(max_length=7)
     rfam_id = models.CharField(max_length=40)
     description = models.CharField(max_length=75)
     author = models.CharField(max_length=50)
     comment = models.CharField(max_length=500)
     rfam_URL = models.URLField()

在这里,我有我的脚本familiespopulate.py。定位在PROJECT_ROOT/scripts目录中。

import csv
from browse.models import families

file_path =       "/Users/work/Desktop/StructuRNA/website/scripts/RFAMfamily12.1.txt"

def run(file_path):
    listoflists = list(csv.reader(open(file_path, 'rb'), delimiter='\t'))
    for row in listoflists:
        families.objects.create(
                rfam_acc=row[0],
                rfam_id=row[1],
                description=row[3],
                author=row[4],
                comment=row[9],
        )

当我从终端运行时:

python manage.py runscript familiespopulate

它返回:

No (valid) module for script 'familiespopulate' found
Try running with a higher verbosity level like: -v2 or -v3

问题一定是在导入模型families,我是新手,我在网上或其他任何地方都django找不到任何解决方案。StackOverflow这就是为什么我请求你的帮助!

你知道模型应该如何导入吗?或者......我做错了什么。

重要的一条信息是,如果我修改脚本以打印出参数,而不是在族中创建对象,脚本就会运行。

为了您的信息和好奇心,我还将在此处发布我正在使用的文本文件的摘录。

RF00001 5S_rRNA 1302    5S ribosomal RNA    Griffiths-Jones SR, Mifsud W, Gardner PP    Szymanski et al, 5S ribosomal database, PMID:11752286   38.00   38.00   37.90   5S ribosomal RNA (5S rRNA) is a component of the large ribosomal subunit in both prokaryotes and eukaryotes. In eukaryotes, it is synthesised by RNA polymerase III (the other eukaryotic rRNAs are cleaved from a 45S precursor synthesised by RNA polymerase I). In Xenopus oocytes, it has been shown that fingers 4-7 of the nine-zinc finger transcription factor TFIIIA can bind to the central region of 5S RNA. Thus, in addition to positively regulating 5S rRNA transcription, TFIIIA also stabilises 5S rRNA until it is required for transcription.    NULL    cmbuild -F CM SEED  cmcalibrate --mpi CM    cmsearch --cpu 4 --verbose --nohmmonly -T 24.99 -Z 549862.597050 CM SEQDB   712 183439  0   0   Gene; rRNA; Published; PMID:11283358    7946    0       0.59496 -5.32219    1600000 213632  305 119 1   -3.78120    0.71822 2013-10-03 20:41:44 2016-04-21 23:07:03

这是第一行,从 listoflists 中提取的结果是:

RF00002
5_8S_rRNA
5.8S ribosomal RNA
Griffiths-Jones SR, Mifsud W
5.8S ribosomal RNA (5.8S rRNA) is a component of the large subunit of    the eukaryotic ribosome. It is transcribed by RNA polymerase I as part of the 45S precursor that also contains 18S and 28S rRNA. Functionally, it is thought that 5.8S rRNA may be involved in ribosome translocation [2]. It is also known to form covalent linkage to the p53 tumour suppressor protein [3]. 5.8S rRNA is also found in archaea.
4

4 回答 4

2

尝试将空文件__init__.py(双下划线)添加到 /scipts 文件夹并运行:

python manage.py runscript scipts.familiespopulate
于 2016-12-30T13:27:19.007 回答
1

除了添加init .py 之外,您不应该在 run 方法中传递任何参数。

def run():
     <your code goes here>
于 2016-12-30T13:50:24.147 回答
0

我也遇到了完全相同的错误,我尝试了上面的所有解决方案,但不幸的是对我没有用。然后我意识到我的错误,我发现了它。

在脚本文件(位于 script/ 文件夹内)中,我为函数使用了不同的名称,应该将其命名为“run”。因此,如果您收到此错误,请确保您也检查过它。

在这里您可以阅读有关“运行脚本”的更多信息

于 2020-08-30T19:36:19.020 回答
0

感谢您的有用评论。我以这种方式修改了我的代码:

import csv
from browse.models import families


def run():
   file_path =   "/Users/work/Desktop/StructuRNA/website/scripts/RFAMfamily12.1.txt"
   listoflists = list(csv.reader(open(file_path, 'r'),delimiter='\t'))
print(listoflists)
for row in listoflists:
    families.objects.create(
                rfam_acc=row[0],
                rfam_id=row[1],
                description=row[3],
                author=row[4],
                comment=row[9],
    )

这是所有的了。现在它工作顺利。我想向大家确认我的文件:familypopulate.py 位于文件init .py的文件夹脚本中

当我把问题似乎解决了

file_path = "/Users/work/Desktop/StructuRNA/website/scripts/RFAMfamily12.1.txt"

在 run 函数内部,从 run(file_path) 中删除参数 file_path。

我的代码的另一个修改是 open(file_path, 'r') 中的参数 r,在它是 open(file_path, 'rb') 之前应该对应于读取二进制文件。

于 2016-12-30T14:43:48.723 回答