首先发帖,尽量不要对我的格式感到生气。
我正在尝试使用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)
答案 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