Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从CSV中读取两列变量,同时对这两列做些什么?_Python_Python 3.x_Loops_Csv_Multiple Columns - Fatal编程技术网

Python 从CSV中读取两列变量,同时对这两列做些什么?

Python 从CSV中读取两列变量,同时对这两列做些什么?,python,python-3.x,loops,csv,multiple-columns,Python,Python 3.x,Loops,Csv,Multiple Columns,我有以下内容: AD_NAME,PTL_NAME AdminsG,TEST_1 SVC ACCTSG,TEST_2 SQL AdminsG,TEST_3 为了简单起见?因此,假设我正在尝试为第0列中的每一行创建一个新文件夹,并在每个文件夹中基于同一行中的第1列创建一个文本文件: AdminsG ->TEST_1.txt SVC ACCTSG ->TEST_2.txt SQL AdminsG ->TEST_3.txt 然而 f

我有以下内容:

AD_NAME,PTL_NAME
AdminsG,TEST_1
SVC ACCTSG,TEST_2
SQL AdminsG,TEST_3
为了简单起见?因此,假设我正在尝试为第0列中的每一行创建一个新文件夹,并在每个文件夹中基于同一行中的第1列创建一个文本文件:

AdminsG
        ->TEST_1.txt
SVC ACCTSG
        ->TEST_2.txt
SQL AdminsG
        ->TEST_3.txt
然而

f = csv.reader(open('GROUP_NAMES.csv', 'r'), delimiter=',')
next(f)
col = list(zip(*f))[0]
for row in col:  
    os.makedirs(row)
    col2 = list(zip(*f))[1]
    for row in col2:
        #...code to write txt files...
返回

IndexError: list index out of range


f = csv.reader(open('GROUP_NAMES.csv', 'r'), delimiter=',')
next(f)
col = list(zip(*f))[0]
for row in col:  
    os.makedirs(row)

创建3个根文件夹很好,所以我想我错过了在循环的同一次迭代中插入第二列变量的机会

我认为你把问题复杂化了

下面是我写的一个快速解决方案:

f = csv.reader(open('GROUP_NAMES.csv', 'r'), delimiter=',')
headers = []
for row in f:
   if not headers:
        headers = row
       continue
    path = os.sep.join(row)
    os.makedirs(path)
此解决方案迭代所有行(跳过标题行),为第一列创建目录,并在该目录内为第二列创建另一个目录


解决方案不起作用的原因是您调用了两次
list(zip(*f))
。第一次执行导致文件句柄被完全迭代。第二次执行导致一个空列表。

我认为您将问题复杂化了

下面是我写的一个快速解决方案:

f = csv.reader(open('GROUP_NAMES.csv', 'r'), delimiter=',')
headers = []
for row in f:
   if not headers:
        headers = row
       continue
    path = os.sep.join(row)
    os.makedirs(path)
此解决方案迭代所有行(跳过标题行),为第一列创建目录,并在该目录内为第二列创建另一个目录


解决方案不起作用的原因是您调用了两次
list(zip(*f))
。第一次执行导致文件句柄被完全迭代。第二次执行导致一个空列表。

对数组来说是的。不是最“pythonic”。。。但是实现了我想要的

try:
    with open('GROUP_NAMES.csv','r') as file:
        f = csv.reader(file, 
                          delimiter = ',', 
                          quotechar = '"')
        next(f)
        row = [row for row in f]
        for i in row:
            os.makedirs(i[0])
            file = open(i[0]+'\\'+i[1]+'.txt', 'w')


except:  

    f.close()  
    raise

对数组来说是的。不是最“pythonic”。。。但是实现了我想要的

try:
    with open('GROUP_NAMES.csv','r') as file:
        f = csv.reader(file, 
                          delimiter = ',', 
                          quotechar = '"')
        next(f)
        row = [row for row in f]
        for i in row:
            os.makedirs(i[0])
            file = open(i[0]+'\\'+i[1]+'.txt', 'w')


except:  

    f.close()  
    raise

看起来问题在于列表只有一个索引,其中包含一组设置值,如下所示:

[('AdminsG', 'SVC ACCTSG', 'SQL AdminsG'), ('TEST_1', 'TEST_2', 'TEST_3')]
所以当你试图执行这一行时,它会试图找到不存在的索引1

col2 = list(zip(*f))[1]
您可能希望将其更改为:

f = csv.reader(open('temp.csv', 'r'), delimiter=',')
next(f)
data = list(zip(*f))
row, col = data[0], data[1]
data = (zip(row, col))
for col1, col2 in data:
     os.mkdirs(os.path.join(col1, col2))
还有一种方法可以编写相同的代码:

import os
import csv

with open('GROUP_NAMES.csv', 'r') as csvReader:
    csv_obj = csv.reader(csvReader)
    for col1, col2 in csv_obj:
       if col1 == 'AD_NAME' and col2 == 'PTL_NAME':
           continue
       os.mkdirs(os.path.join(col1, col2))

看起来问题在于列表只有一个索引,其中包含一组设置值,如下所示:

[('AdminsG', 'SVC ACCTSG', 'SQL AdminsG'), ('TEST_1', 'TEST_2', 'TEST_3')]
所以当你试图执行这一行时,它会试图找到不存在的索引1

col2 = list(zip(*f))[1]
您可能希望将其更改为:

f = csv.reader(open('temp.csv', 'r'), delimiter=',')
next(f)
data = list(zip(*f))
row, col = data[0], data[1]
data = (zip(row, col))
for col1, col2 in data:
     os.mkdirs(os.path.join(col1, col2))
还有一种方法可以编写相同的代码:

import os
import csv

with open('GROUP_NAMES.csv', 'r') as csvReader:
    csv_obj = csv.reader(csvReader)
    for col1, col2 in csv_obj:
       if col1 == 'AD_NAME' and col2 == 'PTL_NAME':
           continue
       os.mkdirs(os.path.join(col1, col2))

也许我的演示太简单了。假设我使用第二列变量来做一些完全不同的事情,比如,用col[1]中的值创建一个文本文件——同一行……或者更复杂的,削土豆皮之类的东西。您的代码示例确实有用,仅供参考。我编辑了这篇文章。也许我把我的演示做得太简单了。假设我使用第二列变量来做一些完全不同的事情,比如,用col[1]中的值创建一个文本文件——同一行……或者更复杂的,削土豆皮之类的东西。您的代码示例确实有用,仅供参考。我编辑了OP。你不需要那个行数组。您可以直接循环文件的其余行,而不需要该行数组。您可以直接循环文件的其余行