小编sou*_*eux的帖子

写入CSV,获取空白字符串的"错误:需要转义"

当有人发现我在这里做错了什么时,我可能会感到非常愚蠢,但我发现自己无法打败看起来应该是一个简单的错误.

我正在用Python将一些数据写入CSV.我想写的一件事是list整数.我join将列表写入字符串之前将其写入文件:

with open('publishers.csv', 'wb') as f:
    writer = csv.writer(f, quoting=csv.QUOTE_NONE, delimiter='|', quotechar='')
    for item in big_list_of_objects:
        description = item.description
        number_list = item.number_list
        formatted_numbers = "-".join(number_list)
        writer.writerow([
            description,
            formatted_numbers
            ])
Run Code Online (Sandbox Code Playgroud)

number_list可能有从零到一大堆数字的任何地方.如果它是一个空列表,则join只需设置formatted_numbers等于空字符串.如果它不是一个空列表,我会得到一个由连字符连接的整数组成的字符串.

number_list = [1,2,34,12]
formatted_numbers = '1-2-34-12'

number_list = []
formatted_numbers = ''
Run Code Online (Sandbox Code Playgroud)

无论如何,那是个主意.实际上,发生的事情是前五行成功写入然后我得到:

File "<console>", line 1, in <module>
  File "/path/path/path.py", line 500, in offending_function
    formatted_numbers
Error: need to escape, but no escapechar set
Run Code Online (Sandbox Code Playgroud)

现在在这种特殊情况下,成功写入的前五行为空number_list.一直崩溃的行也是空的number_list …

python csv

17
推荐指数
1
解决办法
3万
查看次数

从 RandomForestClassifier 解释特征重要性值

我是机器学习的初学者,我无法解释我从第一个程序中获得的一些结果。这是设置:

我有一个书评数据集。这些书可以在大约 1600 本书中使用任意数量的限定词进行标记。审阅这些书籍的人也可以用这些限定词标记自己,以表明他们喜欢阅读带有该标记的东西。

数据集为每个限定符都有一列。对于每条评论,如果给定的限定词用于标记书籍和评论者,则记录值为 1。如果给定评论中的给定限定词没有“匹配”,则记录值为 0。

还有一个“分数”列,其中包含每个评论的 1-5 整数(该评论的“星级”)。我的目标是确定哪些功能对获得高分最重要。

这是我现在拥有的代码(https://gist.github.com/souldeux/99f71087c712c48e50b7):

def determine_feature_importance(df):
    #Determines the importance of individual features within a dataframe
    #Grab header for all feature values excluding score & ids
    features_list = df.columns.values[4::]
    print "Features List: \n", features_list

    #set X equal to all feature values, excluding Score & ID fields
    X = df.values[:,4::]

    #set y equal to all Score values
    y = df.values[:,0]

    #fit a random forest with near-default paramaters to determine feature importance
    print '\nCreating …
Run Code Online (Sandbox Code Playgroud)

python statistics numpy machine-learning scikit-learn

6
推荐指数
1
解决办法
7881
查看次数

如何在Flask/SQLAlchemy中选择reclated()?

有以下型号:

 class Question(db.Model):
   id = db.Column(db.Integer(), primary_key=True)
   title = db.Column(db.String(125))
   text = db.Column(db.Text())
   answers = db.relationship('Answer', backref='for_question')


class Answer(db.Model):
  id = db.Column(db.Integer(), primary_key=True)
  text = db.Column(db.Text())
  question_id = db.Column(db.Integer(), db.ForeignKey('question.id'))
Run Code Online (Sandbox Code Playgroud)

如何在SQLAlchemy/Flask中执行select_related?

我在文档中发现我可以做类似的事情

session.query(Question).options(joinedload(Question.aswers))

但我首先需要通过id获取具体问题,然后选择与之相关的问题

所以我需要这样的东西

Question.query.get(5).select_related()
Run Code Online (Sandbox Code Playgroud)

我可以这样做吗?

python sqlalchemy flask flask-sqlalchemy

5
推荐指数
1
解决办法
1221
查看次数

使用 nginx/gunicorn 上传 Django 文件 - 媒体权限

我正在尝试允许我的 django 站点的用户通过模型上的 FileField 将文件(主要是 PDF)上传到我的服务器。但是,在尝试使用模型表单生成的上传字段时,我一直遇到“Errno 13 Permission Denied”。

我在四处寻找时找到了许多潜在的解决方案,但到目前为止还没有任何东西可以正常工作。这是我第一次真正的部署,我可能把自己弄糊涂了。作为参考,我使用的是 Ubuntu 14.04、Django 1.6 和 gunicorn+nginx。

现在,我的媒体根目录位于我的项目目录中:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(BASE_DIR, "media/uploads")
Run Code Online (Sandbox Code Playgroud)

该错误表明正确的目录存在问题,因此它会出现在正确的位置。

我已经尝试到chown -r媒体目录www-data:www-data,但没有成功。我四处寻找,找出运行 python 进程的用户,并尝试将“他”设置为所有者 - 没有用。我将其翻转回其原始所有者和组 ( root:root) 并尝试chmod -r使用 755 和 770,这两个都未能解决问题。

如果我chmod -r选择 777,那么一切都“有效”——但这不是我想因为显而易见的原因而暴露的事情。

我的静态文件正在从我的项目根目录 (/var/www/mysite/static) 之外的目录中收集和正确提供,因此我尝试将媒体文件夹移到那里并重复上述所有步骤 - 结果相同。

我怎样才能让我的媒体文件夹安全地接受来自我的用户的上传和下载,而不会让这个安全漏洞大开?

谢谢!

python django nginx gunicorn

3
推荐指数
1
解决办法
5216
查看次数

在ModelMultipleChoiceField中定义选择时,如何合并两个查询集?

我在两个不同的地方使用一段代码,以便动态生成一些表单字段。在这两种情况下,dynamic_fields都是一个字典,其中的键是对象,值是对象列表(在空列表的情况下,值是False):

class ExampleForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        dynamic_fields = kwargs.pop('dynamic_fields')
        super(ExampleForm, self).__init__(*args, **kwargs)

        for key in dynamic_fields:
            if dynamic_fields[key]:
                self.fields[key.description] = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple, queryset=dynamic_fields[key], required=False)


    class Meta:
        model = Foo
        fields = ()
Run Code Online (Sandbox Code Playgroud)

在一个视图中,对于任何键,该值都是通过单个数据库查询(单个正常查询集)返回的对象列表。这种观点很好。

在另一个视图中,它需要多个查询才能获得构造给定值所需的一切。我首先实例化具有等于空白列表的值的字典,然后使用基本列表理解(dict[key] += queryset)一次将从这些多个查询中获得的查询集添加到适当的列表中。这使每个值成为一个二维列表,然后通过执行以下操作将其展平(并删除重复项):

for key in dict:
    dict[key] = list(set(dict[key]))
Run Code Online (Sandbox Code Playgroud)

我尝试了几种不同的方法-将每个查询集中的查询直接附加到值/列表,使用append而不是将其保留为列表列表,+=但每次都会遇到相同的错误:'list' object has no attribute 'none'

通过回溯查看,错误出现在表单的clean方法中。这是django.forms.models中代码的相关部分:

def clean(self, value):
    if self.required and not value:
        raise ValidationError(self.error_messages['required'], code='required')
    elif not self.required and not value:
        return …
Run Code Online (Sandbox Code Playgroud)

python django django-forms django-queryset

1
推荐指数
1
解决办法
2082
查看次数