【发布时间】:2011-10-26 19:54:59
【问题描述】:
在使用批处理文件执行以下操作时,我确实需要帮助:
我需要逐行读取文本文件,并且对于给定 CSV 文件中以文本文件行中找到的元素开头的每个条目,将其写入新的 CSV 文件。
或者,换句话说:
阅读以下内容
example.csv
Page, Pageviews, Bounce Rate, /category/apples, 1029, 67%, /category/brussel-sprout, 3409, 92%, /category/orange, 1233, 87%
然后逐行读取下面的文本文件:
example.txt
/category/apples
/category/orange
并创建这个文件:
new.csv
Page, Pageviews, Bounce Rate, /category/apples, 1029, 67%, /category/orange, 1233, 87%
到目前为止,我已经通过一个批处理文件处理了这个项目,该文件获取列表的每个单独地址,检查它是否具有特定的标题,然后将扩展名写入列表中。不幸的是,这还不够,因为我还需要从原始 CSV 重新生成表格——但只有带有标题的表格。我试图通过 Python 来做到这一点,但事实证明它太麻烦了(无论如何,系统边界使得编写 Python 变得不可行)。如果您想查看代码,您可以通过我的个人资料单击我的问题,但它们与此无关。我剩下要做的就是这个,我要求清晰和想法,因为我的优势不在于 BAT 而在于 C++(不,这不是一个选择)。
感谢您的帮助。这个社区(除了一些例外)证明是学习宝贵经验和推动我成功的绝佳理由。
这就是我使用 Python 的方向:
import csv
lines = []
with open('output.txt','r') as f:
for line in f.readlines():
lines.append(line[:-1])
with open('corrected.csv','w') as correct:
writer = csv.writer(correct, dialect = 'excel')
with open('input.csv', 'r') as mycsv:
reader = csv.reader(mycsv)
for row in reader:
if row[0] not in lines:
writer.writerow(row)
【问题讨论】:
-
如果你觉得在 Python 中这样做很麻烦,我无法想象你为什么认为批处理文件会更好。你没有其他选择吗,比如 PowerShell?
-
不这么认为,不。是否没有简单的方法可以像读取文本文件一样读取 CSV 文件并说出类似 1 的内容。检查您所在的对象是否 = 文本文件中的任何文本行 2(如果是)。将对象和所有五个对象写入一个新文件 2(如果没有)。移动 5 个对象并重复。
-
天哪,windows批处理中的文本处理?你的努力最好花在弄清楚如何让 Python 在你的目标上运行。
-
您是说 Python 无法在您的系统上运行,还是您的 Python 代码无法运行?您使用的是什么版本的 Windows?即使它是最新的,它也有 PowerShell。即使没有,您仍然很可能拥有 VBScript/JScript 之类的选项,这比批处理要少得多。 (但我的第一选择是 Python。)
-
您忘了提及您的数据存在 Unicode 问题...
标签: python csv batch-file