我写了一个脚本,可以从多个csv中提取文本。有人可以帮我将脚本嵌入其中吗,该脚本可以从不同的压缩文件中读取csv数据,并在一个位置创建多个csv(每个压缩文件一个)。 例如-如果我在压缩文件夹z1中有10个csv,在压缩文件夹z2中有5个csv。我想从每个压缩文件中提取文件,并将提取的文件放在一个位置。在这种情况下,它将是z1.csv(带有来自10个csv的串联数据)和z2.csv(带有来自5个csv的串联数据)。 我正在使用以下脚本,
allfiles=glob.glob(os.path.join(input_fldr,"*.csv"))
a=[]
b=[]
for file_ in allfiles:
dirname, filename=os.path.split(file_)
f=open(file_,'r',encoding='UTF-8')
lines=f.readlines()
f.close()
for line in lines:
if line.startswith('Hello'):
a.append(filename)
b.append(line)
df_a=pd.DataFrame(a,columns=list("A")
df_b=pd.DataFrame(b,columns=list("B")
df=pd.concat([df_a,df_b],axis=1)
答案 0 :(得分:0)
我来到的代码大致上是我认为您想要发生的事情(此示例中需要的所有文件都是available here):
import zipfile
import pandas as pd
virtual_csvs = []
with zipfile.ZipFile("test3.zip", "r") as f:
for name in f.namelist():
if name.endswith(".csv"):
data = f.open(name)
virtual_csvs.append(pd.read_csv(data, header=None))
pd.concat(virtual_csvs, axis=1).to_csv('test4.csv', header=False, index=False)
virtual_csvs = []
我们首先创建一个存储所有熊猫DataFrame的数组,就像您的数组[df_a, df_b]
with zipfile.ZipFile("test3.zip", "r") as f:
这将加载zip文件“ test3.zip”-在读取模式下用您的zip文件名替换为变量f
for name in f.namelist():
这会遍历zip文件中的每个文件名,并将其加载到变量name
if name.endswith(".csv"):
此行是不言自明的-如果文件的扩展名为.csv
,请运行以下代码。
data = f.open(name)
f.open(name)
命令打开文件(name
)-等效为open(name, 'r') as data
virtual_csvs.append(pd.read_csv(data, header=None))
pd.read_csv(data, header=None)
将该文件加载到熊猫数据框中(header = None表示没有列标题,因此数据已加载到数据框中)
virtual_csvs.append
将数据帧加载到virtual_csvs列表中
此代码的最后一行:
pd.concat(virtual_csvs, axis=1).to_csv('output.csv', header=False, index=False)
将所有csv文件连接为一个更大的文件(“ output.csv”)。
pd.concat(virtual_csvs, axis=1)
意味着按列连接virtual_csvs中的所有csv文件(DataFrame)(这将返回pd.DataFrame
)
to_csv('output.csv', header=False, index=False)
意味着将给定的DataFrame转换为名为'output.csv'的csv文件。
header=False
意味着删除每一列的标题名称
index=False
禁用数据帧中的行号