小编rud*_*den的帖子

查找csv文件中的列数

我的程序需要读取可能有1,2或3列的csv文件,并且需要相应地修改其行为.在迭代器运行之前,是否有一种简单的方法可以检查列数而不"消耗"一行?以下代码是我可以管理的最优雅的代码,但我更愿意在for循环开始之前运行检查:

import csv
f = 'testfile.csv'
d = '\t'

reader = csv.reader(f,delimiter=d)
for row in reader:
    if reader.line_num == 1: fields = len(row)
    if len(row) != fields:
        raise CSVError("Number of fields should be %s: %s" % (fields,str(row)))
    if fields == 1:
        pass
    elif fields == 2:
        pass
    elif fields == 3:
        pass
    else:
        raise CSVError("Too many columns in input file.")
Run Code Online (Sandbox Code Playgroud)

编辑:我应该包含有关我的数据的更多信息.如果只有一个字段,则必须包含科学记数法的名称.如果有两个字段,则第一个字段必须包含名称,第二个字段必须包含链接代码.如果有三个字段,则附加字段包含一个标志,该标志指定名称当前是否有效.因此,如果任何行包含1,2或3列,则所有行必须具有相同的列.

python csv

22
推荐指数
3
解决办法
5万
查看次数

如何将字段添加到namedtuple?

我正在使用一个namedtuples列表.我想在每个已命名的元组创建后添加一个字段.我似乎只能将它作为一个属性引用(如namedtuple.attribute = 'foo'),但它不会添加到字段列表中.如果我不对字段列表做任何事情,我有什么理由不这样做吗?有没有更好的方法来添加字段?

>>> from collections import namedtuple
>>> result = namedtuple('Result',['x','y'])
>>> result.x = 5
>>> result.y = 6
>>> (result.x, result.y)
(5, 6)
>>> result.description = 'point'
>>> (result.x, result.y, result.description)
(5, 6, 'point')
>>> result._fields
('x', 'y')
Run Code Online (Sandbox Code Playgroud)

python namedtuple

15
推荐指数
3
解决办法
2万
查看次数

如何使用d3.js计算给定x的y值

我已经定义了一个行生成器,d3.js如下所示:

var line = d3.svg.line()
    .interpolate("monotone")
    .x(function(d) {return x(d.date); })
    .y(function(d) {return y0(d.visits); });
Run Code Online (Sandbox Code Playgroud)

使用以下格式从csv读取数据:

date,visits
12/08/12,1
13/08/12,0
14/08/12,0
15/08/12,33
16/08/12,28
Run Code Online (Sandbox Code Playgroud)

csv文件被加载到data并解析为:

data.forEach(function(d) {
    d.date = d3.time.format("%d/%m/%y").parse(d.date);
    d.visits = +d.visits;
});
Run Code Online (Sandbox Code Playgroud)

并添加到文档中:

svg.append("path")
    .datum(data)
    .attr("class", "line")
    .attr("d", line)
Run Code Online (Sandbox Code Playgroud)

在我的脚本的其他地方,我需要弄清楚特定日期的y值.因此,例如,我可能希望得到日​​期所在的行的值15/08/12(相当于y0(33)).我怎样才能做到这一点?

javascript d3.js

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

使用difflib.get_close_matches()忽略大小写

如何告诉difflib.get_close_matches()忽略大小写?我有一个字典,其中包含一个包含大小写的定义格式.但是,测试字符串可能具有完全大小写或没有大小写,这些应该是等效的.但是,结果需要适当地大写,因此我不能使用修改后的字典.

import difflib

names = ['Acacia koa A.Gray var. latifolia (Benth.) H.St.John',
    'Acacia koa A.Gray var. waianaeensis H.St.John',
    'Acacia koaia Hillebr.',
    'Acacia kochii W.Fitzg. ex Ewart & Jean White',
    'Acacia kochii W.Fitzg.']
s = 'Acacia kochi W.Fitzg.'

# base case: proper capitalisation
print(difflib.get_close_matches(s,names,1,0.9))

# this should be equivalent from the perspective of my program
print(difflib.get_close_matches(s.upper(),names,1,0.9))

# this won't work because of the dictionary formatting
print(difflib.get_close_matches(s.upper().capitalize(),names,1,0.9))
Run Code Online (Sandbox Code Playgroud)

输出:

['Acacia kochii W.Fitzg.']
[]
[]
Run Code Online (Sandbox Code Playgroud)

工作代码:

根据Hugh Bothwell的回答,我修改了如下代码以获得一个有效的解决方案(当返回多个结果时,它也应该有效):

import difflib

names = ['Acacia koa …
Run Code Online (Sandbox Code Playgroud)

python difflib

8
推荐指数
2
解决办法
3433
查看次数

不调用属性修饰符的setter方法

我试图使用属性方法来设置类实例的状态,具有以下类定义:

class Result:
    def __init__(self,x=None,y=None):
        self.x = float(x)
        self.y = float(y)
        self._visible = False
        self._status = "You can't see me"

    @property
    def visible(self):
        return self._visible

    @visible.setter
    def visible(self,value):
        if value == True:
            if self.x is not None and self.y is not None:
                self._visible = True
                self._status = "You can see me!"
            else:
                self._visible = False
                raise ValueError("Can't show marker without x and y coordinates.")
        else:
            self._visible = False
            self._status = "You can't see me"

    def currentStatus(self):
        return self._status
Run Code Online (Sandbox Code Playgroud)

但是,从结果来看,虽然内部变量正在改变,但似乎没有执行setter方法:

>>> …
Run Code Online (Sandbox Code Playgroud)

python properties class decorator python-decorators

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

支持从VSTO AddIn进行日志记录的最简单方法

我在Visual Studio 2013中编写了一个简单的MS Word AddIn,我希望能够记录事件,最好是Windows事件查看器.如果我尝试为我的应用程序创建一个新的事件源,我似乎会遇到权限问题.我正在寻找最简单的方法来启用我的VSTO记录事件,这些事件不违反良好的编程指南.

选项1:使用VSTO 4.0源

我在MSDN文档中看到Office Solutions的事件记录:

您可以使用Windows中的事件查看器查看安装或卸载Office解决方案时Visual Studio Tools for Office运行时捕获的异常消息.您可以使用事件记录器中的这些消息来解决安装和部署问题.

使用VSTO 4.0源记录这些事件.我可以使用VSTO 4.0源来记录来自我自己的AddIn的错误,还是这被认为是不好的做法?

编辑:从Eugene Astafiev的回答和我在其他地方读到的内容看起来这将是一个糟糕的方法,因为VSTO 4.0源只应该处理AddIns的管理,而不是AddIns本身.其他问题的答案也建议不要使用"通用"来源.

选项2:创建要包含在安装程序中的引导程序

作为替代方案,我可以包含一个简单的引导程序应用程序,它在安装过程中创建源代码,但我无法使用"属性">"在Visual Studio中发布"下的"安装设置"查看如何添加自己的先决条件.可以吗?还有另一种方法吗?我宁愿不必创建InstallShield Windows Installer,因为在其他方面,默认情况下创建的安装程序适用于我的目的.为了让事件记录工作,创建一个完整的安装程序似乎有些过分.

编辑:到目前为止,似乎没有"简单"的方法来做到这一点,尽管通过遵循链接的指令创建安装程序并不太复杂.

选项3:使用日志记录框架并记录到文件

第三种选择是使用log4net或类似的日志记录框架并配置File Appender以记录到文件.

最初我并不是非常热衷于实现文件记录,因为a)我的应用程序不会非常频繁地记录,并且b)我想避免将日志文件分散在难以找到的各个位置.

编辑:这是我到目前为止所做的选项,因为它需要最少的配置,并且如果将来我的日志记录要求发生变化,则可以适应.

c# logging vsto

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

如何在 Visual Studio 中将“nuget add”作为构建后事件运行?

我已在项目.csproj文件的 AfterBuild 部分添加了一条命令,如果它是发布配置,则会自动创建 NuGet 包。正如下面的代码片段中所指定的,这部分运行良好。

<Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release'">
    <Exec Command="nuget pack $(ProjectFileName) -IncludeReferencedProjects -Prop Configuration=Release"></Exec>
</Target>
Run Code Online (Sandbox Code Playgroud)

我现在想添加一个附加nuget add $(NugetFileName) -source c:\NugetLocal命令来将 NuGet 包复制到我的本地存储库。不幸的是,该$(NugetFileName)宏不存在。我可以结合使用$(TargetName)宏,.nupkg但包名称包含程序集版本号,似乎没有方便的宏。有没有办法在不使用 MSBuild 脚本的情况下执行此操作?

visual-studio nuget nuget-package

5
推荐指数
2
解决办法
2112
查看次数

未在预期位置捕获 LINQ 查询的异常

我正在使用 LINQ 查询将输入字符串解析为类。我已将查询包装在 try/catch 块中以处理解析错误。parsedList问题是异常没有在我期望发生的点被捕获,它只在访问结果对象()的点停止程序流。我是否误解了 LINQ 的工作原理或异常的工作原理?

public class Foo
{
    public decimal Price { get; set; }
    public decimal VAT { get; set; }
}

public class MyClient
{
    public IEnumerable<Foo> ParseStringToList(string inputString)
    {
        IEnumerable<Foo> parsedList = null;
        try
        {
            string[] lines = inputString.Split(new string[] { "\n" }, StringSplitOptions.None);

            // Exception should be generated here
            parsedList =
                from line in lines
                let fields = line.Split('\t')
                where fields.Length > 1
                select new Foo()
                {
                    Price = Decimal.Parse(fields[0], CultureInfo.InvariantCulture), …
Run Code Online (Sandbox Code Playgroud)

c# linq exception

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

一切都在沙盒中运行,但是我使用PayPal Live收到了IdentityException

我正在使用.NET SDK(https://www.nuget.org/packages/PayPal)使用PayPal REST API将PayPal付款集成到我的网站中。我的网站在Microsoft Azure中作为应用程序服务运行。我有一个配置为使用PayPal Sandbox的测试插槽,以及一个使用实时凭据的生产插槽(配置设置在“应用程序设置”中,并且是特定于插槽的)。

一切在Sandbox中都可以正常工作,并且我可以使用实时配置进行身份验证并获得访问令牌,但是当我尝试处理任何事情时,我都得到了PayPal.IdentityException(我尝试了“付款”以及“计费计划和协议”)。如果查看IdentityException Response(或Details),则会得到以下信息:

{"error":"invalid_token","error_description":"The token passed in was not found in the system"}
Run Code Online (Sandbox Code Playgroud)

进一步挖掘,似乎ApiContext创建的具有AccessToken设置,但是Config属性为null。如果我查看来自的API请求(来自PayPalResource.LastRequestDetails.Value),即使它使用实时配置,它也会将请求发送到api.sandbox.paypal.com,而不是实时API。这似乎是我的问题ApiContext,我建立了如下问题:

public static APIContext Authenticate()
{
    string clientId = ConfigurationManager.AppSettings["PayPalClientId"];
    string clientSecret = ConfigurationManager.AppSettings["PayPalSecret"];
    string mode = ConfigurationManager.AppSettings["PayPalMode"];

    var config = new Dictionary<string, string>();
    config.Add("mode", mode);
    config.Add("clientId", clientId);
    config.Add("clientSecret", clientSecret);

    accessToken = new OAuthTokenCredential(config).GetAccessToken();
    return new APIContext(accessToken);    // <--- problem here
}
Run Code Online (Sandbox Code Playgroud)

除了手动构造Config字典,而不是使用字典ConfigManager …

.net c# integration paypal paypal-rest-sdk

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

使用ASP.Net单一形式限制的Bootstrap表单样式

我的网站使用ASP.Net Web Forms,它限制您只有一个表单runat="server",所以我已将所有内容包装在表单标记中.现在,我正在使用Bootstrap 3,并希望使用.form-horizo​​ntal单独设置一些表单.似乎要使用Bootstrap水平表单样式,我不得不重新考虑如何在网站上使用表单,或者我将不得不在任何地方使用水平表单,这两者都不是理想的.所以现在看来​​我必须使用自定义样式来模仿水平表单.有没有更好的办法?

asp.net webforms twitter-bootstrap-3

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