python - 导入csv - 对列进行过滤 - 使用时间戳写入txt文件 - 使用txt

时间:2015-12-06 22:50:23

标签: etl

首先发帖,尽量不要对我的格式感到生气。

我正在尝试使用python 3.5对csv文件进行ETL - 我拥有的代码,成功提取,过滤正确的列,在" new_string"中创建所需的最终结果。变量并在运行结束时生成正确命名的txt文件。但打开txt文件显示它只有一个字符,如果它是一个索引i = [1]只是出现的东西,我期待整个列以字符串格式打印出来..显然我没有采取格式列表/字符串的考虑,但我现在卡住了。

如果有人看到这里发生的事情。抬头我会很感激。提前谢谢......

这是我的代码:

cdpath = os.getcwd()

def get_file_path(filename):
   currentdirpath = os.getcwd()
   file_path = os.path.join(os.getcwd(), filename)
   print (file_path)
   return file_path

path = get_file_path('cleanme.csv')  ## My test file to work on

def timeStamped(fname, fmt='%Y-%m-%d-%H-%M-%S_{fname}'):   ##Time stamp func
     return datetime.datetime.now().strftime(fmt).format(fname=fname)

def read_csv(filepath):
    with open(filepath, 'rU') as csvfile:
       reader = csv.reader(csvfile)
       for row in reader:
         new_list = row[2]
         new_string = str(new_list)
         print (new_string)

    with open(timeStamped('cleaned.txt'),'w') as outf:
        outf.write(new_string)

1 个答案:

答案 0 :(得分:0)

在您的代码中,您有:

def read_csv(filepath):
    with open(filepath, 'rU') as csvfile:
       reader = csv.reader(csvfile)
       for row in reader:
         new_list = row[2]
         new_string = str(new_list)
         print (new_string)

    with open(timeStamped('cleaned.txt'),'w') as outf:
        outf.write(new_string)

正如我在上面的评论中所指出的,有一些问题是第二个是否正确缩进,但实际上,它并不重要:

您在for循环(for row in reader)中生成new_string。但是因为你没有在循环中使用它(除了打印它),当循环结束时,你将有权访问的唯一值将是最后一个元素。

或者,如果您将with ... as outf作为循环的一部分,则每次都打开一个新副本并覆盖数据,这样clean.txt只会在最后再次显示最后一个值

我认为你想要的是:

def read_csv(filepath):
    with open(filepath, 'rU') as csvfile:
      with open(timeStamped('cleaned.txt'),'w') as outf:
        reader = csv.reader(csvfile)
        for row in reader:
          new_list = row[2] #extract the 3rd column of each row
          new_string = str(new_list) # optionally do some transforms here
          print (new_string) #debug
          outf.write(new_string) #store result