【发布时间】:2014-03-17 11:53:41
【问题描述】:
大约一年前,我用 python 编写了一个小程序,它基本上可以自动化我的部分工作(在你们的帮助下!)但是,我遇到了一个问题。随着我不断使程序变得越来越好,我意识到 Python 不想与 excel 配合得很好,而且(不用让你厌烦细节就足以说明 xlutils 不会复制公式)我需要有更多的权限来访问我的 excel意图。
所以我开始使用 VB(2010 Express,如果有帮助的话)。我一生中唯一上过的编程课程就是它,而且它非常简单,所以我决定回到它为此。不幸的是,我已经忘记了很多我学到的东西,而且我们从来没有真正从兔子洞里走这么远。所以,长话短说,我想:
1) 从结构如下的 .csv 读取数据:
41,332.568825,22.221759,-0.489714,eow
42,347.142926,-2.488763,-0.19358,eow
46,414.9969,19.932693,1.306851,r
47,450.626074,21.878299,1.841957,r
48,468.909171,21.362568,1.741944,r
49,506.227269,15.441723,1.40972,r
50,566.199838,17.656284,1.719818,r
51,359.069935,-11.773073,2.443772,l
52,396.321911,-8.711589,1.83507,l
53,423.766684,-4.238343,1.85591,l
2) 按第 5 列的字母顺序对数据进行排序
3)然后只选择第 5 列中带有“l”的那些,按第 2 列(升序)对它们进行数字排序,并将它们复制到一个名为线圈.csv
4)然后只选择第5列中具有“r”的那些,按第2列(降序)对它们进行数字排序并将它们复制到相同的文件coil.csv(显然附加在其他文件之后)
在所有的喧嚣之后,我想出去:
51,359.069935,-11.773073,2.443772,l
52,396.321911,-8.711589,1.83507,l
53,423.766684,-4.238343,1.85591,l
50,566.199838,17.656284,1.719818,r
49,506.227269,15.441723,1.40972,r
48,468.909171,21.362568,1.741944,r
47,450.626074,21.878299,1.841957,r
46,414.9969,19.932693,1.306851,r
我意识到这可能是一个相当复杂的问题,如果没有人愿意处理所有这些问题,我当然理解,哈哈。无论如何,一些完整的代码、sn-ps、想法甚至相关链接将不胜感激。我一直在并且仍在谷歌搜索,但要找到与此相关的可靠可靠信息比预期的要难。
附:这是我正在谈论的一段python代码(尽管它为我并不真正需要的左右创建了两个单独的文件)-如果它对您有帮助的话。
msgbox(msg="Please locate your survey file in the next window.")
mainfile = fileopenbox(title="Open survey file")
toponame = boolbox(msg="What is the name of the shots I should use for topography? Note: TOPO is used automatically",choices=("Left","Right"))
fieldnames = ["A","B","C","D","E"]
surveyfile = open(mainfile, "r")
left_file = open("left.csv",'wb')
right_file = open("right.csv",'wb')
coil_file = open("coil1.csv","wb")
reader = csv.DictReader(surveyfile, fieldnames=fieldnames, delimiter=",")
left_writer = csv.DictWriter(left_file, fieldnames + ["F"], delimiter=",")
sortedlefts = sorted(reader,key=lambda x:float(x["B"]))
surveyfile.seek(0,0)
right_writer = csv.DictWriter(right_file, fieldnames + ["F"], delimiter=",")
sortedrights = sorted(reader,key=lambda x:float(x["B"]), reverse=True)
coil_writer = csv.DictWriter(coil_file, fieldnames, delimiter=",",extrasaction='ignore')
for row in sortedlefts:
if row["E"] == "l" or row["E"] == "cl+l":
row['F'] = '%s,%s' % (row['B'], row['D'])
left_writer.writerow(row)
coil_writer.writerow(row)
for row in sortedrights:
if row["E"] == "r":
row['F'] = '%s,%s' % (row['B'], row['D'])
right_writer.writerow(row)
coil_writer.writerow(row)
【问题讨论】:
-
是的,它们是拼写错误。此外,这只是程序的一部分。宏对我帮助不大。
-
对不起,我没有关注你。如果有什么我可以做的更清楚的,请告诉我。
-
快速版不支持宏。
标签: python vb.net excel sorting csv