Вариант 1: .csv
, .txt
Файлы
Родной Python не может читать файлы .xls
. Если преобразовать файл (ы) для .csv
или .txt
, вы можете использовать csv
модуль в пределах стандартной библиотеки:
# `csv` module, Standard Library
import csv
filepath = "./test.csv"
with open(filepath, "r") as f:
reader = csv.reader(f, delimiter=',')
header = next(reader) # skip 'A', 'B'
items = set()
for line in reader:
line = [word.replace(" ", "") for word in line if word]
line = filter(str.strip, line)
items.update(line)
print(list(items))
# ['uyete', 'NHYG', 'QHD', 'SGDH', 'AFD', 'DNGS', 'lkd', 'TTT']
Вариант 2: .xls
, .xlsx
Файлы
Если вы хотите чтобы сохранить исходный формат .xls
, вам необходимо установить third-party module на номер handle Excel files.
Установка xlrd
из командной строки:
pip install xlrd
В Python:
# `xlrd` module, third-party
import itertools
import xlrd
filepath = "./test.xls"
with xlrd.open_workbook(filepath) as workbook:
worksheet = workbook.sheet_by_index(0) # assumes first sheet
rows = (worksheet.row_values(i) for i in range(1, worksheet.nrows))
cells = itertools.chain.from_iterable(rows)
items = list({val.replace(" ", "") for val in cells if val})
print(list(items))
# ['uyete', 'NHYG', 'QHD', 'SGDH', 'AFD', 'DNGS', 'lkd', 'TTT']
Вариант 3: DataFrames
Вы можете обрабатывать CSV и текстовые файлы с пандами DataFrames. See documentation для других форматов.
import pandas as pd
import numpy as np
# Using data from gist.github.com/anonymous/a822647a00087abc12de3053c700b9a8
filepath = "./test2.txt"
# Determines columns from the first line, so add commas in text file, else may throw an error
df = pd.read_csv(filepath, sep=",", header=None, error_bad_lines=False)
df = df.replace(r"[^A-Za-z0-9]+", np.nan, regex=True) # remove special chars
stack = df.stack()
clean_df = pd.Series(stack.unique())
clean_df
DataFrame Выход
0 India1
1 India2
2 myIndia
3 Where
4 Here
5 India
6 uyete
7 AFD
8 TTT
dtype: object
Сохранить как файлы
# Save as .txt or .csv without index, optional
# target = "./output.csv"
target = "./output.txt"
clean_df.to_csv(target, index=False)
Примечание: Результаты вариантов 1 & 2 могут быть преобразованы в неупорядоченный, панды столбчатых объекты тоже с pd.Series(list(items))
.
Наконец: Как Script
Сохранить любого из трех вариантов выше функции (stack
) в файл (с именем restack.py
). Сохраните этот скрипт в каталоге.
# restack.py
import pandas as pd
import numpy as np
def stack(filepath, save=False, target="./output.txt"):
# Using data from gist.github.com/anonymous/a822647a00087abc12de3053c700b9a8
# Determines columns from the first line, so add commas in text file, else may throw an error
df = pd.read_csv(filepath, sep=",", header=None, error_bad_lines=False)
df = df.replace(r"[^A-Za-z0-9]+", np.nan, regex=True) # remove special chars
stack = df.stack()
clean_df = pd.Series(stack.unique())
if save:
clean_df.to_csv(target, index=False)
print("Your results have been saved to '{}'".format(target))
return clean_df
if __name__ == "__main__":
# Set up input prompts
msg1 = "Enter path to input file e.g. ./test.txt: "
msg2 = "Save results to a file? y/[n]: "
try:
# Python 2
fp = raw_input(msg1)
result = raw_input(msg2)
except NameError:
# Python 3
fp = input(msg1)
result = input(msg2)
if result.startswith("y"):
save = True
else:
save = False
print(stack(fp, save=save))
Из его рабочего каталога запустите сценарий через командную строку. Ответьте на запросы:
> python restack.py
Enter path to input file e.g. ./test.txt: ./@data/test2.txt
Save results to a file? y/[n]: y
Your results have been saved to './output.txt'
Ваши результаты должны напечатать в консоли вы и, возможно, сохранить в файл output.txt
. Отрегулируйте любые параметры в соответствии с вашими интересами.
не должны там быть «ТТТ» в единственном выходе клеток ? – rassar
@rassar Да, спасибо, я обновил его – nik
Итак, этот файл '.xls' - это, по сути, обычный текст, содержащий данные? Или это полностью отформатированный документ Excel? – ForceBru