我正在尝试使用单列文件路径创建一个csv文件。我需要在第二栏中填充一个。
我想要得到的结果如下;
./1/a_1.csv, 1
./1/a_2.csv, 1
./1/a_3.csv, 1
我尝试过的代码是这样;
import numpy as np
data=np.chararray((650,2), itemsize=20)
for i in range(1, 650):
data[0][0]="./1/a_" + str(i) + ".csv"
np.savetxt("C:\\a.csv", data, delimiter = ",")
但是,它似乎不起作用。你能帮忙吗?
答案 0 :(得分:5)
您不需要Numpy。做类似的事情
with open('a.csv', 'w') as outf:
for i in range(650):
print('./1/a_%s.csv, 1' % (i + 1), file=outf)
你很黄金。
答案 1 :(得分:3)
如果您不关心文件的创建方式(只要它可以工作),请寻求AKX的解决方案。
如果要使用Numpy进行此操作,则需要弄平dtype。 np.savetxt
有一个默认的格式化程序,无法理解您给它的数组。
这是我设法获得所需输出的方式:
data = np.empty((650,2),dtype="S20") # empty array of the correct datatype
data[:,1] = '1' # set column 1 to '1' (as you noted)
for i in range(650):
data[i][0] = "./1/a_" + str(i) + ".csv" # put your filenames into first column
np.savetxt(r"C:\a.csv", data, delimiter = ",", fmt="%s") # save it using %s formatter
答案 2 :(得分:1)
在循环的每次迭代中,您只能写入{{element.name}}
。在整个范围内循环时,您需要更改循环以更改要设置的阵列位置。
答案 3 :(得分:1)
在csv文件中,分隔符为“;”不是“,”。
import numpy as np
data=np.chararray((650,2), itemsize=20)
for i in range(1, 650):
data[0][0]="./1/a_" + str(i) + ".csv"
np.savetxt("C:\\a.csv", data, delimiter = ";")
答案 4 :(得分:1)
我将使用Pandas库中的数据框。与chitown88的答案类似,但更紧凑。
import pandas as pd
# create a list with paths to files named from 1 to 256
file_paths = ["./1/a_{}.csv".format(i) for i in range(1,257)]
# add the list to a Pandas Dataframe, the column name can be omitted
df = pd.DataFrame(data=file_paths, columns=['Paths'])
# add a column of 1's to the DataFrame
df['1'] = 1
# write the DataFrame without the indices and column names to a csv file using a specific separation character
df.to_csv('C:\\a.csv', sep=',', index=False, header=False)
答案 5 :(得分:-3)
我个人喜欢将所有数据存储到一个数据框中,然后在最后,将其保存到一个csv文件中,而不是在每次迭代后进行写操作。
所以我初始化了一个空白数据帧,称为results
然后遍历您的范围,创建您的file_path字符串。然后,使用当前的file_name字符串和第二列创建第一行。该数据将附加到结果数据框中,然后移至列表/范围中的下一项。继续该过程,直到完成为止,然后将最终结果数据帧保存到文件中
import pandas as pd
# initialize an empty dataframe
results = pd.DataFrame()
# iterates each element in the range list to form a row that is appended to the results dataframe
for i in range(1, 650):
file_path="./1/a_" + str(i) + ".csv"
temp_df = pd.DataFrame([[file_path, 1]], columns = ['file_path', 'col_2'])
results = results.append(temp_df.reset_index(drop = True))
# after iterating through all the elements, saves completed results dataframe to file
results.to_csv("a.csv", index=False))