如何为每个CSV列生成特定文件?

时间:2017-09-07 18:27:01

标签: python

我有一个包含多列整数值的大型CSV文件:

1122  2222 3333 6664
4588  2122 5555 7747
1155  8844 1147 8895
....  .... .... ....

我想为每列生成此格式的特定文件。让我们举一个第1列的例子:

sudo google-chrome -c -a tt1
sudo google-chrome -a tt1 -d 1122 -u 1122

sudo google-chrome -c -a tt1
sudo google-chrome -a tt1 -d 4588 -u 4588

sudo google-chrome -c -a tt1
sudo google-chrome -a tt1 -d 1155 -u 1155

在第1列的值完成之前,我们将其存储在特定文件中。

应对所有列重复相同的过程。最后,每列将以“columnx.sh”格式显示其对应的文件。

我们如何使用Python实现此功能?

1 个答案:

答案 0 :(得分:0)

我会解释一种可能的方法(当然有许多方法),而不是为你编写代码。我认为与裸代码片段相比,它更有价值。此示例假定您在编写整个文件之前没有内存限制。

假设您已经了解语言基础,那么您应该从这里开始,解释模块csv

模块csv是操作CSV文件的参考模块,它集成在http://python.org的标准Python发行版中。

一旦明确了它的用法,就可以使用上下文管理器来打开和处理CSV文件,如文档站点上的Python 2示例所述:

>>> import csv
>>> with open('largefile.csv', 'rb') as csvfile:
...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
...     for row in spamreader:
...         # Store data in your data structure

您需要指定特定CSV文件中使用的csv.reader的分隔符参数。它可以是逗号,制表符或一组空格。

当spamreader读取输入文件的每一行时,您可以将每行的每个值存储在您在读取操作之前准备的数据结构中。在您的情况下,列表列表(基本上是矩阵)是一个不错的选择,因为稍后您需要以串行方式获取数据。

您可以使用list.append方法将每行的每个项目推送到列表尾部。由于您需要按列扫描值,垃圾邮件阅读器将按行工作,因此可以创建列表列表,以便您可以非常轻松地在此矩阵中表示表格。

矩阵准备就绪后,可以使用上下文管理器编写文件。

>>> with open('columnx.sh', 'a') as the_file:
...     the_file.write('Hello\n')

这是来自Stackoverflow上另一个问题的文件写入示例,位于https://stackoverflow.com/a/6160082/3789324

在这种情况下,您需要在for方法之前插入嵌套的file.write循环,您可以在其中循环所有列和列的所有元素。

file.write方法应写

s1 = "sudo google-chrome -c -a tt1"
首先是

字符串,然后是字符串

s2 = "sudo google-chrome -a tt1 -d item -u item"

其中item是您刚刚从列表中获得的数字。

要替换字符串中的项目编号,您可以将数字连接到子字符串,这样:

s = "sudo google-chrome -a tt1 -d " + str(item) + " -u " + str(item)"

所以现在你可以在每个不同的迭代中为列的每个元素将s1和s2传递给file.write write方法:

this_file.write(s1 + "\n" + s2 + "\n")

你有你的代码片段。