pandas 在使用PYTHON将3个txt文件转换为一个txt文件期间仅占用一个标题列

ktca8awb  于 2023-08-01  发布在  Python
关注(0)|答案(2)|浏览(134)

假设我有三个txt文件,其中包括表在下面;
| 购买| Purchase |
| --| ------------ |
| 三个| 3 |
| 六| 6 |
我想把这些txt文件连接成一个txt文件...
我使用了这个代码;

import pandas
import glob
file_names = glob.glob("./*.txt")
with open('output_file.txt', 'w') as out_file:
    for i in file_names:
        with open(i) as in_file:
            for j in in_file:
                out_file.write(j)
data = pandas.read_csv("output_file.txt", delimiter='/')

字符串
然而结果是这样的:
| 购买| Purchase |
| --| ------------ |
| 三个| 3 |
| 六| 6 |
| 购买| Purchase |
| 三个| 3 |
| 六| 6 |
| 购买| Purchase |
| 三个| 3 |
| 六| 6 |
我想只取一个“销售和采购”行,并想删除其他销售和采购行。
我怎么能放下这些行。顺便说一下,也许txt文件的数量可以增加.
我的预期结果是这样的:
| 购买| Purchase |
| --| ------------ |
| 三个| 3 |
| 六| 6 |
| 三个| 3 |
| 六| 6 |
| 三个| 3 |
| 六| 6 |

8wigbo56

8wigbo561#

如果您将每个输入文件读取为CSV(尽管文件扩展名为.txt,但问题似乎暗示了这一点),那么您只需要从每个输入文件创建一个dataframe,然后将它们连接起来以生成输出文件,如下所示:

from glob import glob
import os
import pandas

SRC_DIR = '/Volumes/G-Drive/Data'
OUTPUT_FILE = '/Volumes/G-Drive/output.txt'
DELIMITER = '/'

dflist = []

for file in glob(os.path.join(SRC_DIR, '*.txt')):
    dflist.append(pandas.read_csv(file, delimiter=DELIMITER))

df = pandas.concat(dflist, ignore_index=True)

df.to_csv(OUTPUT_FILE, sep=DELIMITER, index=False)

字符串
如果你不想使用 pandas,那么就像这样简单:

with open(OUTPUT_FILE, 'w') as output:
    for file in glob(os.path.join(SRC_DIR, '*.txt')):
        with open(file) as data:
            header = next(data)
            if output.tell() == 0:
                output.write(header)
            for row in data:
                output.write(row)

2wnc66cl

2wnc66cl2#

如果所有.txt文件都具有相同的结构,则可以在第二个循环中添加一个条件,以便对于除第一个文件之外的每个文件,跳过第一行:

import pandas
import glob
file_names = glob.glob("./*.txt")
with open('output_file.txt', 'w') as out_file:
    for index, i in enumerate(file_names):
        if index == 0:  # First file
            with open(i) as in_file:
                for j in in_file:
                    out_file.write(j)
        else:  # The rest of the files
            with open(i) as in_file:
                for j in in_file:
                    if 'Sales' in j:
                        continue  # Skip the row containing 'Sales'
                    else:
                        out_file.write(j)
data = pandas.read_csv("output_file.txt", delimiter='/')

字符串

相关问题