- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 python 中使用 openpyxl,我正在尝试运行 50k 行并从每一行中获取数据并将其放入文件中。但是.. 我发现它运行得越慢越好。前 1k 行非常快,不到一分钟,但之后的 1k 行需要越来越长的时间。
我正在打开一个 .xlsx 文件。我想知道将 .txt 文件打开为 csv 或其他文件或读取 json 文件或其他文件是否更快?或者以某种方式转换成阅读速度更快的东西?
我在给定列中有 20 个唯一值,然后每个值的值都是随机的。我正在尝试为每个值获取整个唯一值列的字符串。
值 1:1243,345,34,124,值 2:1243,345,34,124,等等等等
我正在遍历值列表,查看名称是否存在于文件中,如果存在,那么它将访问该文件并将新值附加到它,如果文件不存在,它将创建文件,然后将其设置为追加。我有一个字典,里面有所有“追加写文件”的东西,所以每当我想写东西的时候,它会抓取文件名,追加的东西在字典中可用,它会查找并写入该文件,因此它不会在每次运行时都打开新文件。
第一个 1k 用了不到一分钟..现在我有 4k 到 5k 的记录,它已经准备好运行 5 分钟..随着记录的增加,它似乎需要更长的时间,我想知道如何加快它向上。它根本不打印到控制台。
writeFile = 1
theDict = {}
for row in ws.iter_rows(rowRange):
for cell in row:
#grabbing the value
theStringValueLocation = "B" + str(counter)
theValue = ws[theStringValueLocation].value
theName = cell.value
textfilename = theName + ".txt"
if os.path.isfile(textfilename):
listToAddTo = theDict[theName]
listToAddTo.write("," + theValue)
if counter == 1000:
print "1000"
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
else:
writeFileName = open(textfilename, 'w')
writeFileName.write(theValue)
writeFileName = open(textfilename, 'a')
theDict[theName] = writeFileName
counter = counter + 1
我在上面的代码中添加了一些时间戳,它不存在,但是你可以看到下面的输出。我看到的问题是它每运行 1k 就会越来越高。第一次 2 分钟,然后 3 分钟,然后 5 分钟,然后 7 分钟。当它达到 50k 时,我担心它会花费一个小时左右,而且会花费太长时间。
1000
2016-02-25 15:15:08
20002016-02-25 15:17:07
30002016-02-25 15:20:52
2016-02-25 15:25:28
4000
2016-02-25 15:32:00
5000
2016-02-25 15:40:02
6000
2016-02-25 15:51:34
7000
2016-02-25 16:03:29
8000
2016-02-25 16:18:52
9000
2016-02-25 16:35:30
10000
有些事情我应该说清楚..我事先不知道值的名称,也许我应该运行并在单独的 python 脚本中获取它们以加快速度?
其次,我需要一个由逗号分隔的所有值组成的字符串,这就是为什么我将其放入文本文件以供稍后获取的原因。我正在考虑按照向我建议的列表来做,但我想知道这是否会遇到同样的问题。我认为问题与读取 excel 有关。无论如何,我可以从中得到一个用逗号分隔的字符串,我可以用另一种方式来做。
或者也许我可以尝试/捕获而不是每次都搜索文件,如果有错误,我可以假设创建一个新文件?也许每次查找都让它变得非常慢?如果文件存在?
这个问题是我在这里的原始问题的延续,我从那里采纳了一些建议.... What is the fastest performance tuple for large data sets in python?
最佳答案
我认为您要做的是从该行的 B 列中获取一个键,并将其用于要追加的文件名。让我们加快速度:
from collections import defaultdict
Value_entries = defaultdict(list) # dict of lists of row data
for row in ws.iter_rows(rowRange):
key = row[1].value
Value_entries[key].extend([cell.value for cell in row])
# All done. Now write files:
for key in Value_entries.keys():
with open(key + '.txt', 'w') as f:
f.write(','.join(Value_entries[key]))
关于python - 在 OpenPYXL 中运行 50k 行 Excel 文件的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35638117/
我想了解 Ruby 方法 methods() 是如何工作的。 我尝试使用“ruby 方法”在 Google 上搜索,但这不是我需要的。 我也看过 ruby-doc.org,但我没有找到这种方法。
Test 方法 对指定的字符串执行一个正则表达式搜索,并返回一个 Boolean 值指示是否找到匹配的模式。 object.Test(string) 参数 object 必选项。总是一个
Replace 方法 替换在正则表达式查找中找到的文本。 object.Replace(string1, string2) 参数 object 必选项。总是一个 RegExp 对象的名称。
Raise 方法 生成运行时错误 object.Raise(number, source, description, helpfile, helpcontext) 参数 object 应为
Execute 方法 对指定的字符串执行正则表达式搜索。 object.Execute(string) 参数 object 必选项。总是一个 RegExp 对象的名称。 string
Clear 方法 清除 Err 对象的所有属性设置。 object.Clear object 应为 Err 对象的名称。 说明 在错误处理后,使用 Clear 显式地清除 Err 对象。此
CopyFile 方法 将一个或多个文件从某位置复制到另一位置。 object.CopyFile source, destination[, overwrite] 参数 object 必选
Copy 方法 将指定的文件或文件夹从某位置复制到另一位置。 object.Copy destination[, overwrite] 参数 object 必选项。应为 File 或 F
Close 方法 关闭打开的 TextStream 文件。 object.Close object 应为 TextStream 对象的名称。 说明 下面例子举例说明如何使用 Close 方
BuildPath 方法 向现有路径后添加名称。 object.BuildPath(path, name) 参数 object 必选项。应为 FileSystemObject 对象的名称
GetFolder 方法 返回与指定的路径中某文件夹相应的 Folder 对象。 object.GetFolder(folderspec) 参数 object 必选项。应为 FileSy
GetFileName 方法 返回指定路径(不是指定驱动器路径部分)的最后一个文件或文件夹。 object.GetFileName(pathspec) 参数 object 必选项。应为
GetFile 方法 返回与指定路径中某文件相应的 File 对象。 object.GetFile(filespec) 参数 object 必选项。应为 FileSystemObject
GetExtensionName 方法 返回字符串,该字符串包含路径最后一个组成部分的扩展名。 object.GetExtensionName(path) 参数 object 必选项。应
GetDriveName 方法 返回包含指定路径中驱动器名的字符串。 object.GetDriveName(path) 参数 object 必选项。应为 FileSystemObjec
GetDrive 方法 返回与指定的路径中驱动器相对应的 Drive 对象。 object.GetDrive drivespec 参数 object 必选项。应为 FileSystemO
GetBaseName 方法 返回字符串,其中包含文件的基本名 (不带扩展名), 或者提供的路径说明中的文件夹。 object.GetBaseName(path) 参数 object 必
GetAbsolutePathName 方法 从提供的指定路径中返回完整且含义明确的路径。 object.GetAbsolutePathName(pathspec) 参数 object
FolderExists 方法 如果指定的文件夹存在,则返回 True;否则返回 False。 object.FolderExists(folderspec) 参数 object 必选项
FileExists 方法 如果指定的文件存在返回 True;否则返回 False。 object.FileExists(filespec) 参数 object 必选项。应为 FileS
我是一名优秀的程序员,十分优秀!