Сравнить csv файлы python
У меня есть два файла в формате csv, и я хочу сравнить столбцы. Я хочу, чтобы список присутствовал в другом файле csv.
Выше я беру файл динамически, но я жестко закодировал «или». Я хочу сравнить его со вторым CSV-файлом, где присутствует список, а не жестко закодированный. как мы можем сохранить список в csv по определенному пути, а затем сравнить этот файл
теперь у вас есть filename0 и filename1 , но вы все еще используете старую переменную filename - это ошибка
если у вас есть два имени файла, вам нужны две метки для отображения имен, и вам нужно использовать read_csv два раза, чтобы прочитать оба файла и сохранить данные в двух переменных и т. д.
в вашем коде неправильные отступы, и мы не знаем, какие строки находятся в функциях
не могли бы вы помочь мне с правильным кодом.
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ.
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это.
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и.
7 Answers 7
The problem is that you are comparing each line in fileone to the same line in filetwo . As soon as there is an extra line in one file you will find that the lines are never equal again. Try this:
@NickYellow No problem. FYI, it is generally best practice to use the with open() as statement to open files so that they are closed properly if any errors occur.
You may find this package useful (csv-diff):
Once installed, you can run it from the command line:
It feels natural detecting differences using sets.
I assumed your new file was just like your old one, except that some lines were added in between the old ones. The old lines in both files are stored in the same order.
- Note that I used the context manager with and some meaningful variable names, which makes it instantly easier to understand. And you don't need the csv package since you're not using any of its functionalities here.
- About your code, you were almost doing the right thing, except that _you must not go to the next line in your old CSV unless you are reading the same thing in both CSVs. That is to say, if you find a new line, keep reading the new file until you stumble upon an old one and then you'll be able to continue reading.
UPDATE: This solution is not as pretty as Chris Mueller's one which is perfect and very Pythonic for small files, but it only reads the files once (keeping the idea of your original algorithm), thus it can be better if you have larger file.
Всем привет!
Такая проблема - у меня есть два файла: 1 содержит множество строк, в каждой из которых около 40 столбцов. 2 файл содержит так же множество строк, но в каждой строке по 1 столбцу. Мне нужно сравнить каждую строку по 40му столбцу, из файла 1, со строками из 2 файла. Если хотя бы одна строка из файла 1 по 40му столбцу совпадает с любой из строк в файле 2, сохранить всю строку в новый файл. Если просто, то , допустим, у нас есть список с какими именами людей мы будем пропускать(это 2 файл), например Коля, Вася, Петя. И просто пришедшая толпа людей с разными фамилиями именами отчествами(файл 1). Нам, вне зависимости от фамилии и отчества(все столбцы кроме 40го) нужно запускать только людей с именами Коля,Вася,Петя.(т.е сохранять в новый файл).
Для решения этой задачи мне сказали использовать змею, но я просто не могу найти инструменты в питоне для решения этой задачи. Сижу уже 3й день и так и не продвинулся.
Заранее спасибо!
P.S. Файлы в формате CSV.
Может Вам воспользоватся MS excel или Libree ?
Просто как то странно звучит, что Вам посоветовали использовать питон, но у Вас да же логики по которой работать будет программа нет. Вы вообще пишите на питоне?
Ну как бы тут могут Вам написать программу, но эт как то не честно, делать за Вас работу.
Нужно написать используя именно пайтон. Да лол, я учусь на эколога(писал когда-то простенькие скрипты на пыхе). Мне вот выдали такое задание.
Знаю, что скрипт такой сделать, более менее понимающему пайтон человеку не составит труда. Я же - просто в шоке.
Sam67, тогда хотя бы напишите
1. Структуру файла 1.csv.
Хотя бы 2-3 строки из файла, что бы можно было тестировать
2. Структуру файла 2.csv.
Хотя бы 2-3 строки из файла, что бы можно было тестировать.
А то мы тут понапридумываем =)
В питоне нет специальных велосипедов для решения частных задач. Все через if и for, как у всех языков.
1 файл
1036749 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 k__Bacteria; p__Firmicutes; c__Bacilli; o__Gemellales; f__Gemellaceae; g__; s__
259732 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 2.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 k__Bacteria; p__Proteobacteria; c__Alphaproteobacteria; o__Caulobacterales; f__Caulobacteraceae; g__Brevundimonas; s__diminuta
2 файл
g__Brevundimonas
g__Sphingomonas
g__Microcystis
По сути, если g__ пусто - отсеиваем, если g__(и что то тут) не совпадает с ни одной из строк файла 2 - отсеиваем. Что то типо того(Cry).
Мне кажется, что можно найти лучшее решения + я не знаю, как мне вывести в аутуп нужные мне колонки.
И бонусом, я даже не знаю, как такое гуглить, но мне нужно будет прикруть как-то дополнительный фильтр
К примеру в колонке Data1 могут быть такие значения:
И мне нужно сделать дополнительный фильтр, что если встерчается к примеру слово: WORLD, или EARTH, то пропускать.
Сравнить два больших файла на уникальные значения в строках
Доброго всем времени суток. Сразу скажу, практически впервые пользуюсь пакетом MS Office.
Сравнить два набора данных и вывести уникальные записи в Memo
Доброго времени суток! Помогите решить небольшую задачку! Нужно сравнить два набора данных в 2-х.
Как сравнить два строчных массива и вывести уникальные значения из одного из них?
Есть два строчных массива, первый - это общая словесная база в нем собрано около 2000 строк, второй.
Как сравнить два csv файла по определенной колонке?
Есть два файла var csv1 = File.ReadAllLines("1.csv"); var csv2 = File.ReadAllLines("2.csv"); .
Так я не понял, у вас там числа или строки. Если числа - то используйте numpy. load_txt для загрузки, потом отсортировать, searchsorted для поиска в отсортированом массиве.
Если строки - то просто преобразуйте в множество (set). И, конечно, разбейте код на функции, пока не поздно.
Непонятно что с чем ты сравниваешь. Почему в примере output выводится только две колонки, хотя их три в примере. Ты хочешь сравнить всю строку целиком (каждый столбец) или только по первому столбцу? Имеет ли значение порядок строк?
Вообще для чтения csv есть модуль csv в котором ты можешь получить все строки как набор значений списков
или как словари.
Нужно вывести в отдельный файл только уникальные строки, сравнивая два файла
Приветствую! Начну сразу с дела: нужно вывести в отдельный файл только уникальные строки.
Сравнить два ListBox и уникальные элементы записать в третий
Помогите, как правильно решить задачку. Нужно сравнить данные listbox2 с listbox1 , те данные.
Вывести два одномерных массива в разные столбцы csv-файла
Здравствуйте! Не смог найти в инете ответ. Есть 2 одномерных массива. Надо вывести их в csv файл.
Сравнить два файла и вывести на экран их отличие
Имеются два файла одинакового размера, элементами которого являются отдельные символы. Выяснить.
Сравнить два doc-файла и вывести результат сравнения
Всем привет! Я хочу создать программу, которая сравнивает содержимое двух документов Word и.
Мне нужно сравнить два файла CSV и распечатать различия в третьем файле CSV. В моем случае первый CSV - это старый список хешей с именем old.csv, а второй CSV - это новый список хешей, который содержит как старый, так и новый хеш.
Третий файл - это копия старого, а не обновление. Что случилось ? Надеюсь, вы можете мне помочь, большое спасибо !!
PS: я не хочу использовать diff
Вам нужно уточнить, что такое «разница» и как ее распечатать. Какая строка есть в старом файле, но не в новом? Если строка есть в новом файле, а в старом нет? Если поменять местами две последовательные строки? Если линию переместили на другую позицию? Подобные детали затрудняют сравнение последовательностей ДНК, например, но вам нужно точно знать, что вы имеете в виду в своей проблеме.
@Chris_Rands, потому что мне нужно снова использовать CSV для других вещей, таких как вставка SQL и т. Д.
Проблема в том, что вы сравниваете каждую строку fileone с той же строкой filetwo . Как только в одном файле появится лишняя строка, вы обнаружите, что строки больше никогда не будут равны. Попробуй это:
@NickYellow Нет проблем. К вашему сведению, обычно рекомендуется использовать with open() as оператор для открытия файлов, чтобы они закрывались должным образом в случае возникновения каких-либо ошибок.
Вы можете найти этот пакет полезным ( csv-diff ):
После установки вы можете запустить его из командной строки:
Кажется естественным обнаруживать различия с помощью наборов.
Я предположил, что ваш новый файл был таким же, как ваш старый, за исключением того, что некоторые строки были добавлены между старыми. Старые строки в обоих файлах хранятся в том же порядке.
- Обратите внимание, что я использовал диспетчер контекста with и несколько значимых имен переменных, что мгновенно упрощает понимание. И вам не нужен этот csv пакет, поскольку вы здесь не используете ни одну из его функций.
- Что касается вашего кода, вы поступили почти правильно, за исключением того, что _вы не должны переходить к следующей строке в старом CSV, если вы не читаете одно и то же в обоих CSV. То есть, если вы найдете новую строку, продолжайте читать новый файл, пока не наткнетесь на старую, и тогда вы сможете продолжить чтение.
ОБНОВЛЕНИЕ: это решение не так красиво, как решение Криса Мюллера, которое идеально и очень Pythonic для небольших файлов, но оно читает файлы только один раз (сохраняя идею вашего исходного алгоритма), поэтому может быть лучше, если у вас есть файл большего размера.
Ответы 1
Я не знаю, что вы пытаетесь сделать с данными, поэтому я оставляю пустым work_with_data(data1, data2) , но этот код показывает, как получить два имени файла, использовать read_csv() два раза и, наконец, запустить функцию work_with_data(data1, data2)
Он также использует два Labels для отображения двух имен файлов.
Обновлено: Я немного изменил код, чтобы вы могли использовать pandas или csv.reader в work_with_data
В данных 1 мне нужен столбец из 1-го CSV-файла; а в данных 2 еще один столбец. теперь, если данные 2-го csv присутствуют в 1-м csv (значение столбцов), то он должен сообщать о таких значениях в другом csv
у вас есть все столбцы из 1-го csv в data1 и все столбцы из 2-го файла в data2. Теперь вам нужно использовать данные1 и данные2 для создания данных3 с ожидаемыми столбцами и сохранения их в третьем CSV-файле. Но я не знаю, что вы ожидаете от data3. Может data1["FAC_TYPE"].isin( data2["FAC_TYPE"] ) ? Документ: pandas.isin
да, мне нужны данные1["FAC_TYPE"].isin( данные2["FAC_TYPE"] )
Я пробовал приведенный выше код. Можете ли вы помочь мне узнать, как я могу получить их динамически из файлов user.both?
если у вас есть новая проблема, создайте новый вопрос на новой странице - у вас будет больше места для кода, и он будет более читабельным. У вас есть место, чтобы лучше описать, что вы пытаетесь сделать.
вы не можете использовать код из этого вопроса, чтобы сделать это? У вас уже есть два askopenfilename в примере.
Я изменил пример, так что теперь work_with_data получает имена файлов, и вы можете использовать csv.reader вместо pandas
I need to compare two CSV files and print out differences in a third CSV file. In my case, the first CSV is a old list of hash named old.csv and the second CSV is the new list of hash which contains both old and new hash.
Here is my code :
The third file is a copy of the old one and not the update. What's wrong ? I Hope you can help me, many thanks !!
PS : i don't want to use diff
You need to be more precise as to what a "difference" is and how to print it. What is a line is in the old file but not in the new? If a line is in the new file but not in the old? If two consecutive lines are swapped? If a line is moved to another position? Details like these make it hard to compare DNA sequences, for example, but you need to be sure exactly what you mean in your problem.
Читайте также: