小编Joe*_*art的帖子

os.walk很慢,有什么方法可以优化?

我正在使用os.walk构建数据存储的映射(此映射稍后在我正在构建的工具中使用)

这是我目前使用的代码:

def find_children(tickstore):
    children = []
    dir_list = os.walk(tickstore)
    for i in dir_list:
        children.append(i[0])
    return children
Run Code Online (Sandbox Code Playgroud)

我对它做了一些分析:

dir_list = os.walk(tickstore)立即运行,如果我什么都不做,dir_list那么此功能立即完成.

迭代dir_list需要花费很长时间,即使我什么都不做append,只需迭代就可以花费时间.

Tickstore 是一个大型数据存储区,有大约10,000个目录.

目前完成此功能大约需要35分钟.

有没有办法加快速度?

我已经看过了替代方案,os.walk但它们似乎都没有在速度方面提供太多优势.

python optimization os.walk

6
推荐指数
2
解决办法
7365
查看次数

我怎样才能在python中绘制字符串vs float?

如何使用pylab 绘制stringfloat类型图的关系图?

x = ['PARIS','LONDON']

y = [2.39, 3.41]
Run Code Online (Sandbox Code Playgroud)

我如何可以绘制xy

python plot matplotlib

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

正确的字典文字布局

我看过人们喜欢格式化词典的几种不同方式,但大多数人似乎都遵循以下两种方式中的一种:

选项1)

d = {
    'key1': 'value1',
    'key2': 'value2'
    }
Run Code Online (Sandbox Code Playgroud)

选项2)

d ={'key1': 'value1', 'key2': 'value2'}
Run Code Online (Sandbox Code Playgroud)

在使用中都做同样的事情,但又是一个pythonic,是一个更好的格式化字典的方式,是一个简单的不正确?

我很想知道哪种格式化方式被广泛接受,并且最好在我的脚本中使用.

在我被告知之前我没有做太多的研究,我做了,它造成了更多的混乱,不同的网站,不同的人,不同的教程,经常使用不同的方式,我找不到任何说"做这样的事情,这是正确的语法"

python dictionary coding-style

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

查找列表中字符串的平均长度

我有一个包含大量数据的大型列表,这些数据是从csv文件中读取的.为简单起见,我将为您提供一个虚拟列表,其中包含的数据要少得多.

list1 = ['foo', 'bar', 'bob', 'jess', 'google', 'alphabet']
Run Code Online (Sandbox Code Playgroud)

我想找到列表中字符串的平均长度.我目前正在这样做:

all_lengths = []
num_of_strings = len(list1)

for item in list1:
    string_size = len(item)
    all_lengths.append(string_size)
    total_size = sum(all_lengths)
ave_size = float(total_size) / float(num_of_strings)
Run Code Online (Sandbox Code Playgroud)

问题是,因为真实列表太大,所以执行此操作需要花费相当长的时间.

是否有更优化或更优雅的方式来执行此操作.

另外,使用Python2.7可以获得它的价值

python list python-2.7

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

写入CSV时添加了额外的字符

我目前正在使用python,读取一个CSV文件,然后将最后一列写入另一个CSV文件.

我的阅读和写作代码是:

with open('source.csv', 'rb') as csvfile:
    rdr = csv.reader(csvfile, delimiter=',', quotechar='|')
    with open('result.csv', 'wb') as result:
        wtr = csv.writer(result, delimiter=',', quotechar='|' )
        for r in rdr:
            wtr.writerow((r[2]))
Run Code Online (Sandbox Code Playgroud)

输入看起来像这样:

#SYMBOL_NAME,TIMESTAMP,VALUE
,20140909230500.000000,0.000000
,20140909231000.000000,0.000000
,20140909231500.000000,0.000000
,20140909232000.000000,0.000000
,20140909232500.000000,0.000000
Run Code Online (Sandbox Code Playgroud)

我对时间戳不感兴趣,因为生成它的软件,在这个例子中,符号名称是一个空列.

我希望我的输出是这样的:

VALUE
0.000000
0.000000
0.000000
0.000000
0.000000
Run Code Online (Sandbox Code Playgroud)

但是我实际上得到了这个:

V,A,L,U,E
0,.,0,0,0,0,0,0
0,.,0,0,0,0,0,0
0,.,0,0,0,0,0,0
0,.,0,0,0,0,0,0
0,.,0,0,0,0,0,0
Run Code Online (Sandbox Code Playgroud)

现在我很确定这是因为delimiter=','在这一csv.writer部分.但是,当我尝试设置 delimiter=''删除逗号时,我被告知必须至少有一个字符串.

当我delimiter一起删除参数然后我得到完全相同的输出.

python csv parsing

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

从文本文件中删除第二行

我读过一些与此类似的问题,但所有问题要么删除第一行或最后一行,要么删除与指定字符串匹配(或不匹配)的行。

我想要做的是删除文本文件中的第二行,然后将所有内容向上移动一行,而不是用空格填充第二行。

例如。第 3 行变为第 2 行,第 4 行变为第 3 行,依此类推。

例如,如果我的输入是:

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

我希望输出是:

1
3
4
5
Run Code Online (Sandbox Code Playgroud)

我不能只指定删除与字符串匹配的行,因为第二行每天都会根据日期更改。

我已经开始使用

with open('file.txt', 'r') as f:
    lines = f.readlines()
    f.write(lines)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何改变它以跳过第二行。

语境:

这是为了为我的团队制定工作轮班表。第一行是标题,第二行是最近的日期。这意味着在每天晚上的午夜,第二行变成了昨天,那时我需要删除该行并在末尾添加新行,但这部分更容易。

python

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