如何将字符串写入CSV文件

时间:2018-12-13 13:38:24

标签: python python-3.x csv numpy

我正在尝试使用单列文件路径创建一个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 = ",")

但是,它似乎不起作用。你能帮忙吗?

6 个答案:

答案 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))