我有一个包含多列整数值的大型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实现此功能?
答案 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")
你有你的代码片段。